您可以在Interface Builder中设置导航栏的编辑按钮吗?

时间:2009-02-07 17:58:40

标签: cocoa-touch interface-builder

设置表格视图以便进行编辑非常容易。只需在UITableViewController中添加一行:

self.navigationItem.rightBarButtonItem = self.editButtonItem;

此行在导航栏上添加了一个编辑按钮,该按钮会将表格更改为编辑模式,并在编辑时将其按钮文本更改为“完成”。

是否可以在Interface Builder中进行设置?我看到你可以添加一个UIBarButtonItem,并可以将其“Identifier”设置为“Edit”,但我没有看到预期的行为。

BTW,“属性”面板中的“标识符”有什么作用?

3 个答案:

答案 0 :(得分:1)

是的,你可以在Interface Builder中添加UIBarButtonItems,它们应该可以工作。

标识符允许您使用预设按钮(如编辑或重新加载),或者您可以选择自定义并创建自己的按钮。

编辑:如果你能解释一下通过IB添加的UIBarButtonItem是如何工作的,我可能会提供进一步的帮助。

UPDATE: UIViewController.editButtonItem是一个特殊方法,它返回一个调用视图setEditing方法的UIBarButtonItem。您可以通过创建一个执行相同操作并将选择器连接到IB中的UIBarButtonItem的方法来实现相同的效果。

在您的标头文件中:

- IBAction edit:(id)sender;

并在您的实施文件中:

- (IBAction) edit:(id)sender {
    [self setEditing:YES animated:YES];
}

然后将选择器连接到UIBarButtonItem。

但是,您可能无法在默认的基于导航的应用程序模板中创建此连接,因为表视图位于单独的文件中。

答案 1 :(得分:0)

看看这里:http://blog.tmro.net/2009/05/uitabbarbuttonitem-did-not-change-its.html

如果您希望您的按钮能够动态更改其标签,请确保使用自定义标识符,否则其标题将是不可变的。

答案 2 :(得分:0)

从Xcode 9.4.1开始,我们似乎仍无法在Interface Builder中专门执行此操作。不过,使用代码非常容易。

您完全不需要在IB中设置按钮。只需在您的viewDidLoad方法中添加以下代码:

navigationItem.leftBarButtonItem = editButtonItem

这将自动设置“编辑”按钮,该按钮将变为“完成”,以便用户可以结束编辑。

要执行与编辑过程相关的任何自定义操作,请覆盖视图控制器的setEditing(_ editing: Bool, animated: Bool)方法。

例如,如果您有一个需要打开和关闭编辑的表格视图,则可以执行以下操作:

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)
    tableView.setEditing(editing, animated: animated)
}

请确保在此处致电super.setEditing

注意:如果您使用的是UITableViewController,则已经在超类中设置了setEditing来处理表视图。除非您有其他要启用/禁用编辑的自定义代码,否则无需覆盖它。