[英]UITableView edit mode not showing delete button
我正在從Apple復制樣本Food Tracker應用程序,並且遇到一個問題,即在“編輯”模式下我的TableView中的項目不顯示左手刪除圖標(紅色的圓形)。 如果我向左滑動,則會在右側顯示一個刪除按鈕。 我已經下載了Food Tracker代碼,它可以正常工作。
我可以看到的區別是示例應用程序已實現了UITableViewController,而我在標准UIViewController中具有UITableView。 我不確定為什么這行不通。
有一些類似的問題,但是它們是Swift / Ios的舊版本,因此我不確定它們是否仍然有用。
這是我最近添加的可使其正常工作的功能
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
//delete the row from the dataSource
dataSource.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
}
else if editingStyle == .insert {
//create a new instance and insert the row
}
}
並將其添加到ViewDidLoad()以在導航欄中獲得“編輯”按鈕
navigationItem.leftBarButtonItem = editButtonItem
這是Food Tracker示例的外觀;
我的缺少左手按鈕。 我可以看到的唯一區別是,我在ViewController中使用了TableView。
謝謝
缺口
我想我解決了這個問題。 實際上,UITableViewController正在做的工作有很多“魔術”。 要在具有TableView的普通UIViewController中重新創建此控件,必須重寫SetEditing函數,並基於按鈕的標題將其置於編輯模式。
override func setEditing(_ editing: Bool, animated: Bool) {
let status = navigationItem.leftBarButtonItem?.title
if status == "Edit" {
tableView.isEditing = true
navigationItem.leftBarButtonItem?.title = "Done"
}
else {
tableView.isEditing = false
navigationItem.leftBarButtonItem?.title = "Edit"
}
}
無需檢查barButtonItem的標題,因為點擊它已經切換了它的狀態並在編輯參數時傳遞了正確的狀態。
同樣,在覆蓋時,您需要調用super的實現,因為不存在將始終顯示delete指示符。
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: true)
tableView.setEditing(editing, animated: true)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.