Переключить другую навигацию программно быстро - PullRequest
0 голосов
/ 23 ноября 2018

Я игнорирую раскадровку и создаю UINavigationController в AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()

    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal
    window?.rootViewController = UINavigationController(rootViewController: HomeController(collectionViewLayout: layout))//make the ViewController class to be the root

    return true
}

У меня есть leftBarButton, который переключается на другой UINavigationController или UICollectionViewController (по вашему совету)

override func viewDidLoad() {
    super.viewDidLoad()

    let parentMenuButton = UIButton(frame: CGRect(x: 0, y: 0, width: 34, height: 34))
    parentMenuButton.addTarget(self, action: #selector(self.menuButtonOnClicked), for: .touchUpInside)
    navigationItem.leftBarButtonItem = UIBarButtonItem(customView: parentMenuButton)
}

@objc func menuButtonOnClicked(){
    print("menuButtonOnClicked button is pressed")
}

enter image description here

Как мне достичь этого программно? (Переключить другую область навигации нажатием кнопки меню)

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
self.navigationController!.pushViewController(secondViewController, animated: true)

Ошибка:

Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Storyboard () не содержит контроллера представления с идентификатором« SecondViewController »

Я создаю SecondViewController:

import UIKit

class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

}

Есть ли способ сделать это, не связываясь с раскадровкой? (Только программно)

1 Ответ

0 голосов
/ 23 ноября 2018

Вам необходимо вызвать метод push в вашем menuButtonOnClicked()

 @objc func menuButtonOnClicked(){
    print("menuButtonOnClicked button is pressed")
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let secondViewController = storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as SecondViewController
    self.navigationController.pushViewController(secondViewController, animated: true)
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...