【问题标题】:After Add a CustomView to navigationItem, CustomView always return nil将自定义视图添加到导航项后,自定义视图始终返回 nil
【发布时间】:2020-02-12 08:07:23
【问题描述】:

下面的代码成功地将customView添加到navigationItem,但是当尝试访问customView时它总是返回nil

override func viewDidLoad() {
    super.viewDidLoad()
    let customView = getCustomView() // supposed that the function return a custom view
    let actionButton = UIBarButtonItem(customView: customView)
    self.navigationItem.rightBarButtonItem = actionButton // successfully added customView
    print(navigationItem.rightBarButtonItem?.customView)  // print always nil
}

结果:

nil

【问题讨论】:

  • 你没有定义你的customView
  • 你能分享完整的例子吗?
  • 放上getCustomView()方法的代码
  • 我使用了与 viewDidLoad() 中相同的代码,它可以工作
  • UIViewController 中的任何其他代码或方法是否修改了navigationItem

标签: ios swift iphone uinavigationbar custom-view


【解决方案1】:

我发现访问我们的customView(自定义rightBarButtonItem)的最佳方式,我们必须通过Swift标准方式访问:

添加customView后,我们只能通过self.navigationItem.rightBarButtonItems数组访问customView。

在我的情况下,从 navigationItem 获取 customView :

let customView = navigationItem.rightBarButtonItems?.first?.customView // 访问第一个 添加了自定义视图

【讨论】:

    【解决方案2】:
    let customView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
        customView.backgroundColor = UIColor.blue// supposed that the function return a custom view
        let actionButton = UIBarButtonItem(customView: customView)
        self.navigationItem.rightBarButtonItem = actionButton // successfully added customView
        print(navigationItem.rightBarButtonItem?.customView)
    

    这对我有用

    【讨论】:

    • 我尝试访问最近成功添加到navigationItem的customView,但是当尝试访问它们时,它显示为nil
    • 可能问题出在你调用的方法上,给它写代码
    • 我的问题是我想在添加到导航项后从 customView 获取框架。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2013-12-17
    相关资源
    最近更新 更多