Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何在嵌入式tableView上实现编辑/删除行为?_Swift_Uitableview - Fatal编程技术网

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

Swift 如何在嵌入式tableView上实现编辑/删除行为?,swift,uitableview,Swift,Uitableview,因此,我有一个嵌入式tableview,我想实现编辑/删除行为: 在我的HomePageViewController中,我有: override func viewDidLoad() { super.viewDidLoad() navigationItem.leftBarButtonItem = editButtonItem } 然而,当我点击编辑按钮时,它会显示done,而嵌入的tableview则什么都不做。当我把上面的代码放到tableview中时,什么都没有发生 如何让

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

在我的HomePageViewController中,我有:

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.leftBarButtonItem = editButtonItem
}
然而,当我点击编辑按钮时,它会显示done,而嵌入的tableview则什么都不做。当我把上面的代码放到tableview中时,什么都没有发生


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

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

方法1:使用子视图控制器的“编辑”按钮 方法2:将编辑事件转发到子视图控制器
注意
editButtonItem
在iOS 10中公开(但更早)。对于小于iOS 10的部署目标,可以结合使用方法2使用自定义编辑按钮。

在这种情况下,不能使用编辑按钮的自动行为。这取决于你自己去实现它。您需要切换表视图的
i编辑
,以及按钮的外观。以下是我自己的一个应用程序的示例:

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
}

我猜“childTabBarControllers”是指“childControllers”吗。但这起作用了——谢谢!是的,这是一个人工制品的变形我的实现,以适应您的情况。我把它修好了。方法1也很好,但是谢谢你把这两种方法都包括进来。是的,方法1非常干净,清楚发生了什么。对于否决这个问题的人,我希望得到一些反馈。
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) }
}
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
}