我有一个 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。运气不好。
想法?
最佳答案
执行以下操作:
确保设置详细 View Controller 的转场具有标识符。在示例 Master-Detail 项目中,标识符是
"showDetail"
。您可以通过在项目的 Document Outline View 中选择 segue,然后在 Attributes Inspector 中查看 Identifier Field 来找到标识符对于 segue。当您删除一行时以编程方式调用此 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) } ...
在您的
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/