如何在导航栏上实现一个按钮,用户可以重新排序&删除UITableView的行?
我是否必须创建自己的工具栏按钮才能拥有UITableView的编辑/完成按钮?
答案 0 :(得分:44)
只需在viewDidLoad
UITableViewController
中添加此行即可
self.navigationItem.leftBarButtonItem = self.editButtonItem;
如果您的表格视图超级视图为UINavigationController
,则会有效。该行将添加按钮,该按钮将在编辑模式下推出表格。
答案 1 :(得分:20)
通常做的是创建自己的自定义BarbuttonItem,然后将此按钮指定为右侧导航栏按钮项:
UIBarButtonItem *barButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"Edit"
style:UIBarButtonItemStylePlain
target:self
action:@selector(toggleEdit)];
self.navigationItem.rightBarButtonItem = barButtonItem;
[barButtonItem release];
这是toggleEdit方法:
-(void)toggleEdit{
[self.tableView setEditing:!self.tableView.editing animated:YES];
if (self.tableView.editing)
[self.navigationItem.rightBarButtonItem setTitle:@"Done"];
else
[self.navigationItem.rightBarButtonItem setTitle:@"Edit"];
}
答案 2 :(得分:6)
UIButton *btnname=[UIButton buttonWithType:UIButtonTypeSystem];
[btnname setFrame:CGRectMake(0,0,110,35)];
[btnname setFont:[UIFont boldSystemFontOfSize:18]];
[btnname setTitle: @"Delete" forState: UIControlStateNormal];
[btnname setTitleColor:UIColorFromRGB(0xCC0707) forState:UIControlStateNormal];
btnname.backgroundColor=UIColorFromRGB(0xE6E7E8);
btnname.showsTouchWhenHighlighted = YES;
[btnname addTarget:self
action:@selector(toggleEdit)
forControlEvents:UIControlEventTouchDown];
UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:btnname];
self.navigationItem.rightBarButtonItem = barItem;
-(void)toggleEdit{
[self.tableView setEditing:!self.tableView.editing animated:YES];
if (self.tableView.editing)
[btnname setTitle: @"Done" forState: UIControlStateNormal];
else
[btnname setTitle: @"Delete" forState: UIControlStateNormal];
}
答案 3 :(得分:4)
这是我使用的Swift版本:
func clickedEditButton(button: UINavigationItem) {
tableView.setEditing(!tableView.editing, animated: true)
if tableView.editing {
button.rightBarButtonItem?.title = "Done"
} else {
button.rightBarButtonItem?.title = "Edit"
}
}
答案 4 :(得分:0)
如果您希望按钮在蓝色“完成”颜色和普通“编辑”颜色之间切换,您可以将rightBarButtonItem设置为UIBarButtonItemStyleDone为蓝色,或者将UIBarButtonItemStylePlain设置为如此
self.navigationItem.rightBarButtonItem.style = UIBarButtonItemStyleDone;
答案 5 :(得分:0)
确保首先需要初始化标题。通过storyBoard,
之后,
@IBAction func editBtnPressed(_ sender: UIBarButtonItem) {
tableView.setEditing(!tableView.isEditing, animated: true)
if tableView.isEditing {
self.editButton.title = "Done"
} else {
self.editButton.title = "Edit"
}
}
答案 6 :(得分:0)
在非UITableViewController上UIViewController有相关的UITableView出口的情况下使用此方法。
如上所述,您不能更改条形按钮项中的值,尤其是在系统项中。如果需要,可以创建两个项目,并以ivars形式提供它们(如UITableViewController)。不过,创建一个新的执行时间并没有那么多,尤其是在可能永远不会使用的情况下。
快速5
@IBOutlet var table: UITableView!
@IBAction func toggleTableEdit(sender:UIBarButtonItem) {
table.setEditing(!table.isEditing, animated: true)
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: (table.isEditing) ? .done : .edit, target: self, action: #selector(toggleTableEdit(sender:)))
}