主从流程控制
Master-Detail flow control
我在 Xcode 中开始了主从 iOS 类型的项目。
我让 MasterViewController 和 DetailViewController 按预期工作。
这是我想知道的方法,使用良好的实践。
通常的行为是,在主视图 table 中点击一个项目时,DetailViewController 会启动并完成它的工作。
但有些情况下还没有准备好,我不想让 DetailViewController 出现。
我只是不想发生任何事情,或者我希望发生其他事情。我怎样才能做到这一点?最好的(标准)方法是什么?
在伪代码中我想要这样的东西:
if situation-is-not-good {
do-some-other-things
} else {
Start-DetailViewController-Normally
}
自从您开始使用 Master-Detail 模板,您正在使用带有标识符 "showDetail"
的 segue 过渡到详细视图控制器。 iOS 为您提供了一个挂钩,用于在选择该行时插入是否应执行该 segue 的决策。
覆盖 shouldPerformSegueWithIdentifier(_:sender:)
并将您的逻辑放在那里。 Return true
如果您希望转场继续,或者 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
}
这是一种可能的解决方案:
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
}
}
我在 Xcode 中开始了主从 iOS 类型的项目。
我让 MasterViewController 和 DetailViewController 按预期工作。
这是我想知道的方法,使用良好的实践。
通常的行为是,在主视图 table 中点击一个项目时,DetailViewController 会启动并完成它的工作。
但有些情况下还没有准备好,我不想让 DetailViewController 出现。 我只是不想发生任何事情,或者我希望发生其他事情。我怎样才能做到这一点?最好的(标准)方法是什么?
在伪代码中我想要这样的东西:
if situation-is-not-good {
do-some-other-things
} else {
Start-DetailViewController-Normally
}
自从您开始使用 Master-Detail 模板,您正在使用带有标识符 "showDetail"
的 segue 过渡到详细视图控制器。 iOS 为您提供了一个挂钩,用于在选择该行时插入是否应执行该 segue 的决策。
覆盖 shouldPerformSegueWithIdentifier(_:sender:)
并将您的逻辑放在那里。 Return true
如果您希望转场继续,或者 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
}
这是一种可能的解决方案:
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
}
}