按下 UINavigationController 后如何将编辑按钮添加到 UINavigationBar

Posted

技术标签:

【中文标题】按下 UINavigationController 后如何将编辑按钮添加到 UINavigationBar【英文标题】:How to add edit button to UINavigationBar after push on UINavigationController 【发布时间】:2016-03-12 02:28:03 【问题描述】:

在导航控制器上推送此新表视图后,我想将表视图的编辑按钮添加到导航控制器的导航栏。当我这样做时,编辑按钮不会出现(我怀疑“后退”按钮会掩盖它),当我返回层次结构时,它就在那里,但现在我有两个(编辑编辑)。我的源代码:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
  let items:UITableViewController = ItemsController()
  myNavigationController.pushViewController(items, animated:true)
  myNavigationController.navigationBar.topItem!.leftBarButtonItems! += [ items.editButtonItem() ]

编辑

如果我注释掉上面的最后一行,并在 push 之前插入以下行,编辑按钮出现在左侧,但现在没有返回按钮:

items.navigationItem.rightBarButtonItem = items.editButtonItem()

解决方案

我在 ItemsController() 的 viewDidLoad() 中使用的解决方案:

    var items = navigationItem.rightBarButtonItems
    if items == nil 
        items = [UIBarButtonItem]()
    
    items! += [ editButtonItem() ]
    navigationItem.rightBarButtonItems = items

【问题讨论】:

【参考方案1】:

UINavigationItem 的左右栏按钮都可以表示为单个 barButtonItembarButtonItems 的数组。您需要访问并设置后者(它添加了一个按钮,而不是仅仅替换 Back 按钮)。要在同一个 viewController 中执行此操作,请使用以下代码:

if var leftBarButtonItems = self.navigationItem.leftBarButtonItems
            leftBarButtonItems.append(self.editButtonItem())
            self.navigationItem.leftBarButtonItems = leftBarButtonItems
        

但是,如果可能的话,我会使用上面的代码将 Edit 按钮放在右侧,因为这是预期的位置。

【讨论】:

您的代码在被推送到 UINavigationController 的 UIViewController 的 viewDidLoad() 方法中时有效

以上是关于按下 UINavigationController 后如何将编辑按钮添加到 UINavigationBar的主要内容,如果未能解决你的问题,请参考以下文章

按下UINavigationController的后退按钮时执行操作

按下 UINavigationController 后如何将编辑按钮添加到 UINavigationBar

如何在 UINavigationController 中使用协议和委托

如果用户按下后退按钮,如何调用一些代码

何时取消 uinavigationcontroller 中的 nsurlconnection

iPhone:UiNavigationController后退按钮[重复]