UITableView编辑/完成按钮

时间:2011-09-12 09:33:13

标签: iphone uitableview

如何在导航栏上实现一个按钮,用户可以重新排序&删除UITableView的行?

我是否必须创建自己的工具栏按钮才能拥有UITableView的编辑/完成按钮?

7 个答案:

答案 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,

enter image description here

之后,

@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:)))
}