如何在嵌入式tableView上实现编辑/删除行为?

时间:2017-08-15 15:25:21

标签: swift uitableview

所以我有一个嵌入式tableview,我想实现编辑/删除行为:Embedded tableview

在我的HomePageViewController中,我有:

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.leftBarButtonItem = editButtonItem
}

但是,所有发生的事情都是当我点击编辑按钮时,它表示已完成,并且嵌入式tableview根本不执行任何操作。当我把上面的代码放在tableview中时没有任何反应。

如何让导航控制器/父视图控制器识别嵌入的表格视图?

2 个答案:

答案 0 :(得分:3)

看起来你正在使用embed segue来嵌入UITableViewController。在父视图控制器中,您可以轻松完成两件事中的一件以实现目标。

方法1:使用子视图控制器的编辑按钮

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
}

方法2:将编辑事件转发到子视图控制器

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
}