• UITableViewCell中添加多个UIButton实例


         在项目中又遇到坑了.UITableViewCell中添加了2个UIButton.点击事件添加在Cell中.cell设置代理,TableViewController类接受代理,并执行相应的方法.根据superView 找到cell,根据cell找到相应的indexpath. 

      贴代码:

      

    - (void)editItem:(UIButton *)sender
    {
        UITableViewCell * cell = (UITableViewCell *)[[[sender superview] superview] superview];
        NSIndexPath * indexPath = [self.tableView indexPathForCell:cell];
        NSLog(@"index row %d", [indexPath row]);
        ......
    }
    

       

      以上方法只有iOS7能用.iOS8得去掉一个superview,如下图:

    - (void)editItem:(UIButton *)sender
    {
        UITableViewCell * cell = (UITableViewCell *)[[sender superview] superview];
        NSIndexPath * indexPath = [self.tableView indexPathForCell:cell];
        NSLog(@"index row %d", [indexPath row]);
        ......
    }
    

      坑啊....我怎么知道iOS8哪个版本去掉的视图?

      不过还好.问了朋友,推荐用响应者链.

    - (UITableViewCell *)tableViewCellForbutton:(UIButton *)button
    {
        for (UIView *next = [button superview] ; next; next = next.superview) {
            UIResponder *nextResponder = [next nextResponder];
            if ([nextResponder isKindOfClass:[UITableViewCell class]]) {
                return (UITableViewCell*)nextResponder;
            }
        }
        return nil;
    }
    //在代理方法中写入如下内容,即可完美找到cell.
    - (void)editItem:(UIButton *)sender
    {
        UITableViewCell * cell = [self tableViewCellForbutton:sender];
        NSIndexPath * indexPath = [self.tableView indexPathForCell:cell];
        NSLog(@"index row %d", [indexPath row]);
      .......
    }
    

    以上方法都是纯代码的方法,StoryBoard(SB)和XIB的方式,还没试过.目前朋友试过SB的方法可以用2个superview找到cell,不被iOS的版本所限制.

  • 相关阅读:
    【2020-04-14】吃一折,长一智吧
    对“沟通成本”模型的一个重新假设
    【2020-04-13】稀缺才能让人珍惜
    【2020-04-12】决策都是当前认知的反映
    hhhhh我进步啦!
    求后序遍历(信息学奥赛一本通 1339)
    数的划分(信息学奥赛一本通 1304 洛谷 1025)
    memset函数怎么用嘞↓↓↓
    stack函数怎么用嘞?↓↓↓
    终于开通博客啦!
  • 原文地址:https://www.cnblogs.com/xclidongbo/p/4271478.html
Copyright © 2020-2023  润新知