如何自定义tableViewCell的向左滑动出现的按钮

 我来答
育知同创教育
2016-08-16 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
 打开 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” 按钮
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式