iOS-UITableView专题程序员iOS Developer

开始用Swift开发iOS 10 - 9 Table Row的删

2017-07-12  本文已影响345人  Andy_Ron

上一篇开始用Swift开发iOS 10 - 8 Table View和UIAlertController的交互是Table Row选择的操作,这一篇继续上一篇的代码实现删除操作。

滑动删除

  override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        
    }

此时滑动有删除按钮:

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            restaurantNames.remove(at: indexPath.row)
            restaurantLocations.remove(at: indexPath.row)
            restaurantTypes.remove(at: indexPath.row)
            restaurantIsVisited.remove(at: indexPath.row)
            restaurantImages.remove(at: indexPath.row)
        }
}

UITableViewCellEditingStyle有两种insertdelete
运行后发现删除动作后,相应的table view row被没有消失,因为上面的删除只是删除了相应数组中的数据,并没有在视图上显示,如要重新加载才会删除。

重新加载UITableView

tableView(_:commit:forRowAt:)后添加:
tableView.reloadData()
另外,更好的刷新table view的方法是使用UITableViewdeleteRows(at:with:)方法,还有动画效果:
tableView.deleteRows(at: [indexPath], with: .fade)

用UITableViewRowAction为滑动产生更多动作

override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
       // 1 
        let shareAction = UITableViewRowAction(style: .default, title: "Share", handler: {
            (action, indexPath) -> Void in
            // 3
            let defaultText = "Just checking in at " + self.restaurantNames[indexPath.row]
            let activityController = UIActivityViewController(activityItems: [defaultText], applicationActivities: nil)
            self.present(activityController, animated: true, completion: nil)
        })
        // 1
        let deleteAction = UITableViewRowAction(style: .default, title: "Delete", handler: {
            (action, indexPath) -> Void in
            
            self.restaurantNames.remove(at: indexPath.row)
            self.restaurantLocations.remove(at: indexPath.row)
            self.restaurantTypes.remove(at: indexPath.row)
            self.restaurantIsVisited.remove(at: indexPath.row)
            self.restaurantImages.remove(at: indexPath.row)
            
        })
        // 2
        return [deleteAction, shareAction]
    }
let defaultText = "Just checking in at " + self.restaurantNames[indexPath.row]
if let imageToShare = UIImage(named: self.restaurantImages[indexPath.row]) {
    let activityController = UIActivityViewController(activityItems: [defaultText, imageToShare], applicationActivities: nil)
    self.present(activityController, animated: true, completion: nil)
}
3407495D-9E60-4E6C-8EFA-31A562A14907.png

定制UITableViewRowAction

可以修改背景颜色:

shareAction.backgroundColor = UIColor(red: 48.0/255.0, green: 173.0/255.0,
                                              blue: 99.0/255.0, alpha: 1.0)
        deleteAction.backgroundColor = UIColor(red: 202.0/255.0, green: 202.0/255.0,
                                               blue: 203.0/255.0, alpha: 1.0)

代码

Beginning-iOS-Programming-with-Swift

说明

此文是学习appcode网站出的一本书 《Beginning iOS 10 Programming with Swift》 的一篇记录

系列文章目录

上一篇 下一篇

猜你喜欢

热点阅读