Iphone UITableView编辑/完成按钮

Iphone UITableView编辑/完成按钮,iphone,uitableview,Iphone,Uitableview,如何在导航栏上实现一个按钮,用户可以通过该按钮对UITableView的行进行重新排序和删除 我是否必须创建自己的工具栏按钮才能为我的UITableView创建编辑/完成按钮?只需在UITableViewController的viewDidLoad中添加这一行即可 self.navigationItem.leftBarButtonItem = self.editButtonItem; 如果您的表视图superview是UINavigationController,则它将起作用。此行将添加按钮,

如何在导航栏上实现一个按钮,用户可以通过该按钮对UITableView的行进行重新排序和删除


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

只需在
UITableViewController的
viewDidLoad
中添加这一行即可

self.navigationItem.leftBarButtonItem = self.editButtonItem;

如果您的表视图superview是
UINavigationController
,则它将起作用。此行将添加按钮,该按钮将在编辑模式下推送表格并退出编辑模式。

通常要做的是创建自己的自定义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"];  
}

如果希望按钮在蓝色“完成”颜色和普通“编辑”颜色之间切换,可以将RightBarButtonim设置为UIBarButtonimStyleDone(蓝色)或UIBarButtonimStylePlane(普通),如下所示

self.navigationItem.rightBarButtonItem.style = UIBarButtonItemStyleDone;

以下是我使用的Swift版本:

func clickedEditButton(button: UINavigationItem) {
    tableView.setEditing(!tableView.editing, animated: true)

    if tableView.editing {
        button.rightBarButtonItem?.title = "Done"
    } else {
        button.rightBarButtonItem?.title = "Edit"
    }
}

确保首先需要初始化标题。通过故事板

此后,

@IBAction func editBtnPressed(_ sender: UIBarButtonItem) {
        tableView.setEditing(!tableView.isEditing, animated: true)

        if tableView.isEditing {
            self.editButton.title = "Done"
        } else {
            self.editButton.title = "Edit"
        }
    }

如果在非UITableViewController上UIViewController有一个到相关UITableView的出口,则使用此选项

如上所述,无法更改条形按钮项中的值,特别是如果它是系统项。如果需要,可以创建这两个项目,并在IVAR中提供它们(如UITableViewController)。但是,创建一个新的执行时间并没有那么长,特别是如果它可能永远不会被使用的话

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

我试过了,虽然按钮在那里,但它并没有将我的tableView推入或退出编辑模式。我必须处理任何代理回调吗?您的视图控制器是UITableViewController的子类吗?我刚刚将我的视图控制器设置为UITableViewController的子类,并且成功了。但是我如何实现允许用户重新排列行的功能呢?现在一切都好了。我需要设置
cell.showsReorderControl=TRUE并实现
-(BOOL)tableView:(UITableView*)tableView canmoverowatinexpath:(nsindepath*)indepath
-(void)tableView:(UITableView*)tableView moverowatinexpath:(nsindepath*)从indepath到indepath:(nsindepath*)到indepath
方法如果我的答案帮助您解决了问题,请不要忘记接受它。泰
@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:)))
}