Как я могу использовать Tabview для загрузки новых данных при сохранении одного и того же представленияIOS

Программируем под IOS
Ответить
Anonymous
 Как я могу использовать Tabview для загрузки новых данных при сохранении одного и того же представления

Сообщение Anonymous »

Я работаю над оберткой PWA, в которой я хочу переместить определенные части PWA в нативное приложение. Например: Login/Authentication (отпечатки пальцев/идентификатор лица) Logic, навигационная логика (Tabbar), уведомления. Вместе с WkwebView (iOS 18) и WebView (iOS 26) это выглядело как совпадение на небесах. Компоненты.
Моя первая настройка была:

Код: Выделить всё

struct ContentView: View {
@State private var selectedTab: Tabs = .home

var body: some View {
TabView(selection: $selectedTab) {
ForEach(Tabs.allCases, id: \.self) { tab in
Tab(tab.title, systemImage: tab.icon, value: tab) {
WebView(url: tab.url)
}
}
}
}
}
< /code>
Это работает, но не так, как я хотел. Приведенный выше код создает новый экземпляр WebView 
для каждой вкладки , который вызывает всевозможные проблемы (повышенное использование памяти, проблемы с файлами cookie/сеансы) и это просто уродливое. Идея была хорошей, но я быстро столкнулся с исключениями, когда пытался перейти к другому URL. Я перестал работать над приложениями iOS, когда Objective-C все еще был основным языком.struct ContentView: View {
@State private var selectedTab: Tabs = .home

var body: some View {
BrowserContainer()

TabView(selection: $selectedTab) {
ForEach(Tabs.allCases, id: \.self) { tab in
Tab(tab.title, systemImage: tab.icon, value: tab) {
Color.red // I made this red to see why the WebView only was 50% of the display height
.onAppear() {
WebViewManager.shared.load(tab.url)
}
}
}
}
}
}

@MainActor
final class WebViewManager: ObservableObject {
static let shared = WebViewManager()

let page: WebPage
let webView: WebView

private init() {
self.page = WebPage()
self.webView = WebView(page)
}

func load(_ url: URL) {
page.load(URLRequest(url: url))
}
}

struct BrowserContainer: View {
@ObservedObject private var manager = WebViewManager.shared

var body: some View {
manager.webView
.ignoresSafeArea()
}
}
< /code>
Но, будучи разработчиком C# для жизни, полученный код сделал меня больным. Это было некрасиво и хакерское, и я был уверен, что это не путь. Вот что заставило меня решить создать этот пост и, надеюсь, получить некоторые знания опытных разработчиков, которые сделали что -то похожее на это. Это будет основная навигация по различным страницам с использованием Tabbar, но также и специальных URL -адресов из уведомлений.


Подробнее здесь: https://stackoverflow.com/questions/797 ... -same-view
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»