设置表格视图以便进行编辑非常容易。只需在UITableViewController中添加一行:
self.navigationItem.rightBarButtonItem = self.editButtonItem;
此行在导航栏上添加了一个编辑按钮,该按钮会将表格更改为编辑模式,并在编辑时将其按钮文本更改为“完成”。
是否可以在Interface Builder中进行设置?我看到你可以添加一个UIBarButtonItem,并可以将其“Identifier”设置为“Edit”,但我没有看到预期的行为。
BTW,“属性”面板中的“标识符”有什么作用?
答案 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
来处理表视图。除非您有其他要启用/禁用编辑的自定义代码,否则无需覆盖它。