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

 我来答
可以叫我表哥
推荐于2016-09-07 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
采纳数:25897 获赞数:1464984
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。

向TA提问 私信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” 按钮,如下所示:

克祥昭我铭3
2015-02-02 · TA获得超过4017个赞
知道大有可为答主
回答量:2198
采纳率:100%
帮助的人:3310万
展开全部
以向cell的contentView,add一个scrollView,contentSize设置的宽一点,然后在其回调里面 让其固定位置即可
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式