tableView cell滑动出现两个按钮的效果怎么实现

2025-04-27 05:43:09
推荐回答(2个)
回答1:

 打开 Xcode,去往 File\New\Project… 并选择 Master-Detail Application ,如下所示:

  将项目命名为 SwipeableCell 并填好你自己的 Organization Name 和 Company Identifier 。选择 iPhone 为目标设备并确保 Use Core Data 没有被选中,如所示:

  对于这样的概念项目的证明,最好保证数据模型尽量简单。

  打开 MasterViewController.m 并找到 viewDidLoad 。将默认设置 Navigation Bar Items 的方法替换为如下实现:

  

  - (void)viewDidLoad {

  [super viewDidLoad];

  

  //1

  _objects = [NSMutableArray array];

  

  //2

  NSInteger numberOfItems = 30;

  for (NSInteger i = 1; i <= numberOfItems; i++) {

  NSString *item = [NSString stringWithFormat:@"Item #%d", i];

  [_objects addObject:item];

  }

  }

  

  这个方法做了两件事:

  这一行创建并初始化一个 NSMutableArray 实例,以后就可以添加对象到它里面了。如果数组没有被初始化,那不论调用 addObject: 多少次,那些对象都不会被存储起来。

  这个循环添加了一些字符串到 _objects 数组,应用运行时,这些字符串将用于显示在 Table View 里。可以修改 numberOfItems 的值,以存储适合更多或更少的字符串。

  下一步。找到 tableView:cellForRowAtIndexPath: 并替换其实现为:

  

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

  

  NSString *item = _objects[indexPath.row];

  cell.textLabel.text = item;

  return cell;

  }

  

  原本 tableView:cellForRowAtIndexPath: 的样板使用日期字符串作为简单数据;而你的实现使用你的数组里的 NSString 对象去填充 UITableViewCell 的 textLabel 。

  往下滚动到 tableView:canEditRowAtIndexPath: ;会看到这个方法已经设置为返回 YES,也就是说, Table View 的每一行都支持编辑。

  就在这个方法下边,tableView:commitEditingStyle:forRowAtIndexPath: 处理对象的删除。然而,因为还不能添加任何东西到这个应用里,那就先稍微修改它一下以适应需求。

  用下面的代码替换 tableView:commitEditingStyle:forRowAtIndexPath: :

  - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

  if (editingStyle == UITableViewCellEditingStyleDelete) {

  [_objects removeObjectAtIndex:indexPath.row];

  [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

  } else {

  NSLog(@"Unhandled editing style! %d", editingStyle);

  }

  }

  

  当用户删除某行时,就用传入的 Index 将那一行的对象从后面的数组中移除,并告知 Table View 它需要移除同一个 indexPath 所表示的那一行 Cell,一确保模型和视图的匹配。

  应用只允许“delete”这一种编辑方式,但在 else 分支里用 log 记录没有在处理什么也不错。如果有某个诡异的事情发生,将会在控制台得到一个提示消息,这比方法静悄悄地返回要好。

  最后,还有一些清理要做。依然在 MasterViewController.m 里,删除 insertNewObject。这个方法现在不正确,因为插入已经不再被支持了。

  编译并运行应用;会看到一个简单列表,如下所示:

  滑动某一行到左边,就会看到一个 “Delete” 按钮,如下所示:

回答2:

可以方便定义UITableViewCell左滑后右侧出现菜单数。支持delegate回调所在行数以及对于操作按钮。 


效果图: