所以我有一个嵌入式tableview,我想实现编辑/删除行为:
在我的HomePageViewController中,我有:
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.leftBarButtonItem = editButtonItem
}
但是,所有发生的事情都是当我点击编辑按钮时,它表示已完成,并且嵌入式tableview根本不执行任何操作。当我把上面的代码放在tableview中时没有任何反应。
如何让导航控制器/父视图控制器识别嵌入的表格视图?
答案 0 :(得分:3)
看起来你正在使用embed segue来嵌入UITableViewController。在父视图控制器中,您可以轻松完成两件事中的一件以实现目标。
override func viewDidLoad() {
super.viewDidLoad()
// Find and (optionally assign it to a variable for later convenience) the embedded controller, IBOutlets aren't available for VCs embedded within a storyboard
let childControllers = childViewControllers.filter { return $0 is EventTableViewController }
let embeddedController = childControllers[0] as! EventTableViewController
navigationItem.leftBarButtonItem = embeddedController.editButtonItem
}
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.leftBarButtonItem = editButtonItem
}
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
// Forward editing state to children
childViewControllers.forEach { $0.setEditing(editing, animated: animated) }
}
注意:editButtonItem
在iOS 10中曝光(但was implemented早得多)。对于低于iOS 10的部署目标,您可以使用自定义编辑按钮和方法2。
答案 1 :(得分:0)
在这种情况下,您无法使用编辑按钮的自动行为。由您自己实施。您需要切换表格视图的isEditing
和按钮的外观。以下是我自己的应用程序中的一个示例:
func doEdit(_ sender: Any?) {
var which : UIBarButtonSystemItem
if !self.tableView.isEditing {
self.tableView.setEditing(true, animated:true)
which = .done
} else {
self.tableView.setEditing(false, animated:true)
which = .edit
}
let b = UIBarButtonItem(barButtonSystemItem: which,
target: self, action: #selector(doEdit))
self.navigationItem.rightBarButtonItem = b
}