美文网首页
使用UITableViewRowAction如何添加图片

使用UITableViewRowAction如何添加图片

作者: 撸代码我是认真的 | 来源:发表于2018-07-17 16:20 被阅读0次

    一、需求:列表左侧滑显示图片(如下图)

    需求图片

    二、使用UITableViewRowAction

    1、使用的时候发现UITableViewRowAction并没有办法设置图片,这就比较扯了,感觉action应该属于一个button,于是便打开视图控制器观察这个控件子控件组成如下图:

    根据视图看到是一个button很开心,于是便遍历cell找这个子控件,竟然没找到,难道图层不对(开始怀疑人生),便接着找父控件如下图:

    结果找到了这个控件。于是便开心的遍历这个父控件取出里面的子控件,这个子控件就是一个button,button可以做什么?设置图片?设置标题?问题就这样解决了。

    三、ios11以下设置无效。

    what?只支持ios11开玩笑,运行程序,打开图层发现层级发生了变化下面是ios8-10的层级:

    iOS 8-10层级: UITableView -> UITableViewCell -> UITableViewCellDeleteConfirmationView

    找到层级就好解决了,接着遍历解决问题。

    四、最重要的来了,上代码,control c + control v的时候来了。

    1、添加手机系统对比宏

    #define SYSTEM_VERSION_GRETER_THAN(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

    #define SYSTEM_VERSION_LESS_THAN(v)                ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

    2、调用时机,在下面的方法调用

    - (void)viewDidLayoutSubviews{

        [super viewDidLayoutSubviews];

        [self configSwipeButtons];

    }

    当然你还需要在tableview的delegate的方法中调用[self.view setNeedsLayout],调用这个方法就会调用上面的方法,在刚开始编辑的时候调用

    -(void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath*)indexPath{

         [self.view setNeedsLayout];

    }

    3、主要调用方法

    - (void)configSwipeButtons

    {

        // 获取选项按钮的reference

        if (SYSTEM_VERSION_GRETER_THAN(@"11.0"))

        {

            // iOS 11层级 : UITableView -> UISwipeActionPullView

            for (UIView *subview in self.contentTableView.subviews)

            {

    //这里写大于等于2是因为我这里需要两个action

                if ([subview isKindOfClass:NSClassFromString(@"UISwipeActionPullView")] && [subview.subviews count] >= 2)

                {

                    // 和iOS 10的按钮顺序相反

                    UIButton*deleteButton = subview.subviews[1];

                    [deleteButtonsetImage:[UIImage imageNamed:@"PlayView_Share"] forState:UIControlStateNormal];

                    UIButton*readButton = subview.subviews[0];

                    [readButtonsetImage:[UIImage imageNamed:@"PlayView_Delete"] forState:UIControlStateNormal];

                }

            }

        }

        else

        {

            // iOS 8-10层级: UITableView -> UITableViewCell -> UITableViewCellDeleteConfirmationView

            SABPlayListTableViewCell *tableCell = [self.contentTableView cellForRowAtIndexPath:self.indexPath];

            for(UIView*subviewintableCell.subviews)

            {

                if ([subview isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")] && [subview.subviews count] >= 2)

                {

                    UIButton*deleteButton = subview.subviews[0];

                    [deleteButtonsetImage:[UIImage imageNamed:@"PlayView_Share"] forState:UIControlStateNormal];

                    UIButton*readButton = subview.subviews[1];

                    [readButtonsetImage:[UIImage imageNamed:@"PlayView_Delete"] forState:UIControlStateNormal];

                }

            }

        }

    }

    相关文章

      网友评论

          本文标题:使用UITableViewRowAction如何添加图片

          本文链接:https://www.haomeiwen.com/subject/zkcgpftx.html