如何将NavigationItem添加到以编程方式创建的UINavigationController

时间:2016-07-21 17:10:27

标签: ios swift uinavigationcontroller uinavigationbar uinavigationitem

我正在使用此代码以编程方式将UINavigationController添加到现有的UIViewController:

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    let nav1 = UINavigationController()
    let mainView = ReminderController(nibName: nil, bundle: nil)
    nav1.viewControllers = [mainView]
    self.window!.rootViewController = nav1
    self.window?.makeKeyAndVisible()

现在我想为UINavigationController管理的NavigationBar添加标题,但主要是我收到此错误:

无法直接在由控制器管理的UINavigationBar上调用pushNavigationItem:animated:

我使用的代码:

let item = UINavigationItem(title: "Reminder")
nav1.navigationBar.pushNavigationItem(item, animated: false)

我试过的任何其他方法都给了我同样的错误。那么如何为该NavController添加标题?

NavBar现在看起来像这样:

enter image description here

3 个答案:

答案 0 :(得分:2)

您的NavigationBar由NavigationController管理,因此您无法直接将项目推送到它。相反,你应该在mainView上设置navigationItem,而NavigationController将把它推到栏上

另外,查看UINavigationController的documentation,我想它可以让你更好地理解navigationController的工作原理。

这是来自它:

  

导航控制器构建导航栏的内容   动态使用导航项目对象(实例)   UINavigationItem类)与视图控制器相关联   导航堆栈。

答案 1 :(得分:1)

在Objective-C

UIBarButtonItem *flipButton = [[UIBarButtonItem alloc] initWithTitle:@"Flip"
style:UIBarButtonItemStyleBordered target:self action:@selector(flipView:)]; nav1.navigationBar.navigationItem.rightBarButtonItem = flipButton;

在Swift中

let barBtnVar = UIBarButtonItem(barButtonSystemItem: .Edit, target: self, action: #selector(Nam1BarBtnKlkFnc(_:)))
self.navigationItem.setRightBarButtonItem(barBtnVar, animated: true)

答案 2 :(得分:0)

尝试用您的viewDidLoad的方法:

    let label = UILabel(text: "Reminder")
    self.navigationController?.navigationBar.topItem?.titleView = label