Как в общем случае использовать UIHostingController из UIViewController, не зная rootViewIOS

Программируем под IOS
Ответить
Anonymous
 Как в общем случае использовать UIHostingController из UIViewController, не зная rootView

Сообщение Anonymous »

У меня есть специальный UINavigationController, который выполняет некоторые действия по перемещению и выталкиванию.
Я использую SwiftUI в приложении UIKit, поэтому некоторые из контроллеров представления в UINavigationController являются UIHostingControllers
В различных частях моего кода у меня есть UIHostingController(rootView: ArticleView()) или UIHostingController(rootView: RatingView()) и некоторые другие
Я хотел конкретно определить, собирается ли контроллер навигации отображать просмотр статьи или просмотр рейтинга, и что я сделал было:

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

protocol TabBarCompatible: View { }

extension ArticleView: TabBarCompatible { }

extension RatingView: TabBarCompatible { }
Затем, когда я просматриваю контроллеры представления в своем навигационном контроллере, я проверяю, соответствует ли пункт назначения одному из приведенных выше:

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

if let destinationView = self as? UIHostingController,
destinationView.rootView is any TabBarCompatible
Теперь приведение к UIHostingController завершается с ошибкой, что, вероятно, могло бы быть успешным, если бы при создании представлений SwiftUI мне нужно было бы выполнить UIHostingController(rootView: AnyView(ArticleView( ))) - однако:
  • Что я действительно хочу проверить, так это `if let targetView = self as? UIHostingController
  • Я предпочитаю не переносить AnyView, если только это не крайний вариант, поскольку мне придется делать это во многих местах.
Другим вариантом может быть хранение всех возможностей, которые я хочу проверить, в массиве и сохранение

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

let swiftUIControllers = [UIHostingController, UIHostingController]

// loop through the swiftUIControllers and compare the current controller using isKind(of: )
Есть ли другой/лучший способ приведения UIViewController к UIHostingController в целом, не зная корневого представления UIHostingController?

Подробнее здесь: https://stackoverflow.com/questions/793 ... without-kn
Ответить

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

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

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

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

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