iOS11 UITableViewCell滑动事件改动

在iOS8之后,苹果官方增加了UITableView的右滑操作接口

optional func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]?
复制代码

在这个方法中可以定义所需要的操作按钮(删除、置顶等),这些按钮的类就是UITableViewRowAction。这个类定义按钮的显示文字、背景色和事件。并且返回数组的第一个元素在UITableViewCell的最右侧显示,最后一个元素在最左侧显示。

override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        let deleteAction = UITableViewRowAction.init(style: .destructive, title: "Delete") { (action, indexpath) in
            self.dataArray.removeObject(at: indexpath.row)
            tableView.deleteRows(at: [indexpath], with: .left)
        }
        let markAction = UITableViewRowAction.init(style: .normal, title: "Mark") { (action, indexpath) in
            
        }
        return [deleteAction, markAction]
}
复制代码

在iOS11中新增了两个代理方法

- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath;
- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath;
复制代码

新的方法提供了:左侧按钮自定义、右侧按钮自定义、自定义图片、背景颜色,通过 UIContextualAction 来设置

// 左侧按钮自定义
override func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        let leftAction = UIContextualAction.init(style: .normal, title: "leftAction", handler: { (action, view, completionHandler) in
            completionHandler(true)
        })
        let configuration = UISwipeActionsConfiguration.init(actions: [leftAction])
        return configuration
}
// 右侧按钮自定义    
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        // 删除操作
        let deleteAction = UIContextualAction.init(style: .destructive, title: "delete", handler: { (action, view, completionHandler) in
            completionHandler(true)
        })
        // 给按钮设置背景图片
        deleteAction.image = UIImage.init(named: "icon_del")

        let addAction = UIContextualAction.init(style: .normal, title: "add") { (action, view, completionHandler) in
            
        }
        // 可以修改按钮的背景色
        addAction.backgroundColor = UIColor.purple
        let configuration = UISwipeActionsConfiguration.init(actions: [deleteAction, addAction])
        return configuration
}
复制代码

创建UIContextualAction对象时,UIContextualActionStyle有两种类型,如果是置顶、已读等按钮就使用。UIContextualActionStyleNormal类型,delete操作按钮可使用UIContextualActionStyleDestructive类型,当使用该类型时,如果是左滑操作,一直向左滑动某个cell,会直接执行删除操作,不用再点击删除按钮。

滑动操作还有一个需要注意的点,当cell高度较小时,会只显示image,不显示title,当cell高度够大时,会同时显示image和title。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值