2011-09-12 165 views
19

如何在导航栏上实现一个按钮,以便用户能够重新订购删除UITableView行?UITableView编辑/完成按钮

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

回答

44

只需添加这一行viewDidLoadUITableViewController

self.navigationItem.leftBarButtonItem = self.editButtonItem; 

,如果你的表视图上海华盈是UINavigationController它将工作。这一行将添加按钮,该按钮将以编辑模式推送表格并将其移出。

+0

我尝试过,虽然按钮是有,但它没有把我的tableView和退出编辑模式。有任何委托回电我必须处理吗? –

+1

是您的视图控制器的一个子类uitableviewcontroller – Robin

+0

@robin。没有它不是。 –

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"]; 
} 
0

如果你希望你的按钮要在蓝色的“完成”颜色和普通的“编辑”颜色之间切换,可以将rightBarButtonItem设置为UIBarButtonItemStyleDone for blue或UIBarButtonItemStylePlain,如下所示:

self.navigationItem.rightBarButtonItem.style = UIBarButtonItemStyleDone; 
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]; 
} 
+0

这是我的工作.. – Saravanan

4

这里是一个斯威夫特版本我用:

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

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

确保您需要先初始化称号。通过故事板,

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" 
     } 
    } 
相关问题