上一篇開(kāi)始用Swift開(kāi)發(fā)iOS 10 - 8 Table View和UIAlertController的交互是Table Row選擇的操作,這一篇繼續(xù)上一篇的代碼實(shí)現(xiàn)刪除操作。
滑動(dòng)刪除
- 實(shí)現(xiàn)
UITableViewDataSource
中相應(yīng)方法:
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
}
此時(shí)滑動(dòng)有刪除按鈕:
- 刪除數(shù)據(jù)
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
有兩種insert
和delete
松蒜。
運(yùn)行后發(fā)現(xiàn)刪除動(dòng)作后但骨,相應(yīng)的table view row被沒(méi)有消失蜘犁,因?yàn)樯厦娴膭h除只是刪除了相應(yīng)數(shù)組中的數(shù)據(jù)姚炕,并沒(méi)有在視圖上顯示征唬,如要重新加載才會(huì)刪除菩咨。
重新加載UITableView
在tableView(_:commit:forRowAt:)
后添加:
tableView.reloadData()
另外吠式,更好的刷新table view的方法是使用UITableView
的deleteRows(at:with:)
方法,還有動(dòng)畫(huà)效果:
tableView.deleteRows(at: [indexPath], with: .fade)
用UITableViewRowAction為滑動(dòng)產(chǎn)生更多動(dòng)作
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]
}
- 1
UITableViewRowAction
的用法和UIAlertAction
類似抽米。style相同特占,具體功能是在回調(diào)閉包中實(shí)現(xiàn)的。 -
UIActivityViewController
繼承是UIViewController
云茸,提供一些服務(wù)是目,例如拷貝到剪貼板,分享內(nèi)容到社交媒體标捺,通過(guò)Messages發(fā)送項(xiàng)目等懊纳。
- 一旦實(shí)現(xiàn)了
tableView(_:editActionsForRowAt:)
方法揉抵,tableView(_:commit:forRowAt:)
方法產(chǎn)生delete按鈕將不再產(chǎn)生,所以要在tableView(_:commit:forRowAt:)
中添加delete按鈕嗤疯。 - 2 返回的
UITableViewRowAction
的數(shù)組冤今,action的顯示順序是,按照數(shù)組的順序在屏幕從有到左顯示茂缚。 - 3
defaultText
是分享的內(nèi)容戏罢,不僅可以是文本,也可以添加圖片對(duì)象UIImage
脚囊。此處代碼修改一下:
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)
}
定制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
說(shuō)明
此文是學(xué)習(xí)appcode網(wǎng)站出的一本書(shū) 《Beginning iOS 10 Programming with Swift》 的一篇記錄
系列文章目錄
- 開(kāi)始用Swift開(kāi)發(fā)iOS 10 - 1 前言
- 開(kāi)始用Swift開(kāi)發(fā)iOS 10 - 2 Hello World龟糕!第一個(gè)Swift APP
- 開(kāi)始用Swift開(kāi)發(fā)iOS 10 - 3 介紹Auto Layout
- 開(kāi)始用Swift開(kāi)發(fā)iOS 10 - 4 用Stack View設(shè)計(jì)UI
- [開(kāi)始用Swift開(kāi)發(fā)iOS 10 - 5 原型的介紹]
- 開(kāi)始用Swift開(kāi)發(fā)iOS 10 - 6 創(chuàng)建簡(jiǎn)單的Table Based App
- 開(kāi)始用Swift開(kāi)發(fā)iOS 10 - 7 定制Table Views
- 開(kāi)始用Swift開(kāi)發(fā)iOS 10 - 8 Table View和UIAlertController的交互
- 開(kāi)始用Swift開(kāi)發(fā)iOS 10 - 9 Table Row的刪除, UITableViewRowAction和UIActivityViewController的使用