如何以编程方式在代码中添加导航控制器,而不是作为初始视图控制器

时间:2017-03-15 12:31:30

标签: ios swift uiviewcontroller uinavigationcontroller uinavigationbar

我对swift和iOS相对较新,无法找到答案或帮助解决我的问题。 我想在单击上一个视图中的按钮时创建导航控制器视图。我之前的观点是在最后一页上有一个按钮。 我成功地将按钮连接到我的下一个视图,但我无法使视图像导航控制器一样。例如,当显示导航栏时,我无法向其添加导航项。

所以我的问题是: 有没有办法通过在第一个视图中单击我的按钮来设置我创建的新视图作为导航视图的根控制器?

我的代码的简短版本:

class ViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()

    let button = UIButton(frame: CGRect(x: view.frame.width / 2, y: view.frame.height / 2, width: 40, height: 40))
    button.backgroundColor = .red
    button.tintColor = .white
    button.setTitle("Test", for: .normal)
    button.addTarget(self, action: #selector(change), for: .touchUpInside)
    view.addSubview(button)
}

func change () {
    let otherView = SecondViewController()
    self.present(otherView, animated: true, completion: nil)
}

}

class SecondViewController: UINavigationController {


override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = .yellow
}

}

使用导航栏显示SecondViewController,但是我在实现导航项时遇到了问题,因为它们没有显示。

我提供的第二个视图控制器是否必须是UIViewController或UINavigationController类型?

我知道,通过使用故事板可以更轻松地实现我的目标,但在我看来,我通过代码创建自己的引用而不是通过将它们拖出故事板来创建它们,从而更好地理解它。 / p>

编辑:我现在没有客观的背景和快速学习4周。我感谢任何帮助。

2 个答案:

答案 0 :(得分:37)

您可以添加UINavigationController,如下所示:

首先,你必须创建SecondViewController

的对象
let objVC: SecondViewController? = storyboard?.instantiateViewController(withIdentifier: "SecondViewController")

或者

let objVC: SecondViewController? = SecondViewController(nibName: "SecondViewController", bundle: nil)

或者

let objVC: SecondViewController? = SecondViewController()

然后将导航添加到SecondViewController

let aObjNavi = UINavigationController(rootViewController: objVC!)

如果您想出席,请使用:

self.present(aObjNavi, animated: true) { 
}

如果你想推,那么使用:

self.navigationController?.pushViewController(aObjNavi, animated: true)

如果要设置为根控制器,请使用:

let appDelegate: AppDelegate = (UIApplication.shared.delegate as? AppDelegate)!
appDelegate.window?.rootViewController = aObjNavi

答案 1 :(得分:0)

var objVC: UIViewController? = storyboard.instantiateViewController(withIdentifier: "ViewController")

var aObjNavi = UINavigationController(rootViewController: objVC)

现在,而不是使用视图控制器对象使用导航控制器对象。