我在Xcode中开始了一个Master-Detail iOS类型的项目。
我有MasterViewController和DetailViewController正常工作。
这是我想知道如何做的,使用一个好的做法。
通常的行为是,当点击主表视图中的项目时,DetailViewController会启动并完成其工作。
但有些事情还没有准备就绪,我不想让DetailViewController显示出来。 我只是不希望发生任何事情,或者我想要其他事情发生。我怎样才能做到这一点?什么是最好(标准)的方式呢?
在伪代码中,我想要像:
if situation-is-not-good {
do-some-other-things
} else {
Start-DetailViewController-Normally
}
答案 0 :(得分:1)
由于您开始使用 Master-Detail 模板,因此您使用标识为"showDetail"
的 segue 转换为详细信息视图控制器< / em>的。 iOS提供了一个钩子,您可以在决定是否应该在选择行时执行segue时插入决策。
覆盖shouldPerformSegueWithIdentifier(_:sender:)
并将您的逻辑放在那里。如果您希望segue继续,请返回true
;如果您想跳过segue,请返回false
。
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
if identifier == "showDetail" {
if situation-is-not-good {
// do-some-other-things
// if you don't let the segue proceed, then the cell remains
// selected, so you have to turn off the selection yourself
if let cell = sender as? UITableViewCell {
cell.selected = false
}
return false // tell iOS not to perform the segue
}
}
return true // tell iOS to perform the segue
}
答案 1 :(得分:1)
以下是一种可能的解决方案:
override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
let theCell = self.tableView.cellForRowAtIndexPath(indexPath)
if situation-is-not-good for theCell {
// Do-Whatever-Is-Needed
return nil
} else {
return indexPath
}
}