【问题标题】:How to add a NavigationItem to a programmatically created UINavigationController如何将 NavigationItem 添加到以编程方式创建的 UINavigationController
【发布时间】:2016-07-21 17:10:26
【问题描述】:

我正在使用此代码以编程方式将 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 添加一个标题呢?

导航栏现在看起来像这样:

【问题讨论】:

    标签: ios swift uinavigationcontroller uinavigationbar uinavigationitem


    【解决方案1】:

    您的 NavigationBar 由 NavigationController 管理,因此您不能将 Item 直接推送到它。相反,您应该在 mainView 上设置 navigationItem,而 NavigationController 会负责将其推送到栏

    另外,请查看 documentation 的 UINavigationController,我认为它可以让您更好地了解 navigationController 的工作原理。

    来自它:

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

    【讨论】:

    • 应该在这里对我来说听起来太严格了,@chandan 回复是完全有效的,该属性甚至有一个 setRightBarButtonItem 设置器,因此旨在供 API 设计使用。
    【解决方案2】:

    在 Objective-C 中

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

    在斯威夫特中

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

    【讨论】:

    • 你使用过 pushnavigationItem 方法
    【解决方案3】:

    viewDidLoad 的方法中试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-03
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      相关资源
      最近更新 更多