Я пытаюсь быстро создать динамический фреймворк. My Framework содержит ViewController внутри раскадровки. Я не могу открыть свой ViewController, когда внутри моего фреймворка приходит push-уведомление. Однако я попытался использовать приведенный ниже код:
let bundle = Bundle(identifier: "my_Framework_bundleID")
let frameworkStoryboard: UIStoryboard = UIStoryboard.init(name: "MyFrameworkStoryboard", bundle: bundle)
let viewController = frameworkStoryboard.instantiateViewController(withIdentifier: "MyViewController")
self.present(viewController, animated: true, completion: nil)
При этом выполняется только код внутри метода MyViewController viewDidLoad
, но не отображаются загрузки пользовательского интерфейса.
Я тоже пробовал это:
let bundle = Bundle(identifier: "my_Framework_bundleID")
let controller = UIViewController(nibName: "MyViewController", bundle: bundle)
present(controller, animated: true, completion: nil)
Я получаю следующую ошибку:
Attempt to present UIViewController: 0x135124920 on MyFramework.anotherViewController: 0x133df1a40 whose view is not in the window hierarchy!
self.pushviewController()
и self.show()
тоже не работают.
Я застрял в этой проблеме два дня.
При запуске в viewController вам может потребоваться запустить в основном потоке. DispatchQueue.main.async {self.present (viewController, анимированный: true, завершение: nil)}
Найдите решение. Спасибо за помощь, ребята, Sh_Khan и E.Coms
Я нашел способ заставить его работать
В Appdelegate моего приложения, где я использую свою структуру, я передал экземпляр rootviewcontroller следующим образом:
test.myFunc(withRootView: (self.window?.rootViewController)!)
Теперь в моем Framework я создал xib и соответствующий файл UIView для него. Чтобы перейти к этому файлу UIView, я использовал приведенный ниже код в функции «myFunc».
public func myFunc(withRootView rootview: UIViewController)
let modalView = MyUIViewClass(frame: self.view.bounds)
if rootview.presentedViewController == nil {
rootview.view.addSubview(modalView)
} else {
rootview.presentedViewController?.view.addSubview(modalView)
}
где вы называете этот код