Как открыть или модально представить контроллер представления из контроллера панели вкладок? - PullRequest
0 голосов
/ 22 мая 2018

Как мне создать всплывающее окно, которое появляется при нажатии кнопки на панели вкладок?Я хотел бы что-то похожее на это: https://www.youtube.com/watch?v=zDWSaItF2ko.

Я перепробовал много решений, но ни одно не сработало.

Например, я пробовал это с моим контроллером основного вида:

Это все еще не работает, хотя.Как бы я пошел о создании этого.Я знаю, что мне нужно представить контроллер представления модально и в текущем контексте, но как мне это сделать с помощью контроллера панели вкладок.

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    if viewController is PopupViewController {
        if let popupView = tabBarController.storyboard?.instantiateInitialViewController() {
            popupView.modalPresentationStyle = .fullScreen
            tabBarController.present(popupView, animated: true, completion: nil)

            return false
        }
    }
    return true
}

Вот несколько картинок, которые могут помочь:

Основной раскадровка:

Main Storyboard

Всплывающий раскадровка:

Popup Storyboard

Просмотр кода контроллера:

View Controller Code

1 Ответ

0 голосов
/ 22 мая 2018

Вы пытались отладить это, используя точки останова в XCode?Из того, что я вижу, первое, что вы делаете, это проверяете, является ли выбранный контроллер представления класса PopupViewController.Вы уверены, что контроллер представления создается правильно?

И, кстати, я бы рекомендовал другой способ создания экземпляра контроллера представления из раскадровки, а не:

tabBarController.storyboard?.instantiateInitialViewController()

Первое, что нужно сделатьперейдите к самому файлу раскадровки, и в контроллере представления вы пытаетесь создать экземпляр Storyboard ID, например, класс раскадровки (PopupViewController в вашем случае).

Далее вы захотите создать экземпляр самой раскадровки, используя инициализатор init(name: String, bundle storyboardBundleOrNil: Bundle?):

let storyboard = UIStoryboard(name: "Popup", bundle: nil)

А теперь создайте экземпляр контроллера представления с помощью переменной storyboard следующим образом:

let popupViewController  = storyboard.instantiateViewController(withIdentifier: "PopupViewController") as! PopupViewController

Наконец, вы можете придать ему дополнительную конфигурацию и представить ее на контроллере панели вкладок:

popupViewController.modalPresentationStyle = .fullScreen
tabBarController.present(popupViewController, animated: true)

Редактировать

Дополнительно, чтобы сделать этобольше Swifty , я рекомендую guard заявление для досрочного выхода.Наконец, метод может выглядеть примерно так:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    guard viewController is PopupViewController else { return true }
    let storyboard = UIStoryboard(name: "Popup", bundle: nil)
    let popupViewController = storyboard.instantiateViewController(withIdentifier: "PopupViewController") as! PopupViewController
    popupViewController.modalPresentationStyle = .fullScreen
    tabBarController.present(popupViewController, animated: true, completion: nil)
    return false
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...