gpt4 book ai didi

ios - 删除表格单元格时重新加载详细 View - Swift

转载 作者:搜寻专家 更新时间:2023-10-31 08:03:28 24 4
gpt4 key购买 nike

我有一个 Split View Controller (主从)。我正在针对 iPhone 6 Plus 对其进行优化。

问题来了。当您选择一个单元格时,它会执行 show-detail segue 并在详细 View 中显示单元格信息。但是,当您删除一个单元格时,详细 View 会保留单元格信息,即使该单元格不再存在也是如此。

这是一个例子:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if (editingStyle == UITableViewCellEditingStyle.Delete) {

//code that deletes my cell/not needed for example

tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Left)

let splitController = self.splitViewController!.viewControllers
self.detailViewController = splitController.last? as? detailedController
if let detail = detailViewController {
detail.title = "Select an item"
//detail.title is a variable in the view controller
//on the views "viewDidLoad" it sets a label.text as title.
}
}
}

我想执行操作:detail.title = "Select an item",以便 View 不再显示已删除的单元格。我尝试通过代码制作一个新的 segue。运气不好。

想法?

最佳答案

执行以下操作:

  1. 确保设置详细 View Controller 的转场具有标识符。在示例 Master-Detail 项目中,标识符是 "showDetail"。您可以通过在项目的 Document Outline View 中选择 segue,然后在 Attributes Inspector 中查看 Identifier Field 来找到标识符对于 segue。

  2. 当您删除一行时以编程方式调用此 segue:

    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
    // Call showDetail when in a splitViewController and 2 view controllers
    // are present
    if self.splitViewController?.viewControllers.count == 2 {
    self.performSegueWithIdentifier("showDetail", sender: self)
    }
    ...
  3. 在您的prepareForSegue 中,确保选中所选行。当您从单元格删除代码调用 segue 时,不会选择任何行,indexPathForSelectedRow() 将返回 nil:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "showDetail" {
    if let indexPath = self.tableView.indexPathForSelectedRow() {
    // set up destination view controller in the normal way
    ...
    } else {
    // No row was selected which means either this is the initial setup
    // or we came here from the row delete code
    let splitController = self.splitViewController!.viewControllers
    self.detailViewController = splitController.last? as? detailedController
    if let detail = detailViewController {
    detail.title = "Select an item"
    ...
    }
    }
    }

注意:如果您的详细信息 View Controller 在未设置 detail.title 时具有默认状态,并且此默认状态是您希望目标 View Controller 在没有行被设置时的样子选中,那么您甚至不需要 prepareForSegue 中的 else 子句。示例 Master-Detail iOS 应用就是这种情况。只需要从编辑代码中以编程方式调用 segue,就可以了。

关于ios - 删除表格单元格时重新加载详细 View - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26821345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com