主从流程控制

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
    }
}