Master-Detail流量控制

时间:2016-07-16 04:52:32

标签: ios swift master-detail

我在Xcode中开始了一个Master-Detail iOS类型的项目。

我有MasterViewController和DetailViewController正常工作。

这是我想知道如何做的,使用一个好的做法。

通常的行为是,当点击主表视图中的项目时,DetailViewController会启动并完成其工作。

但有些事情还没有准备就绪,我不想让DetailViewController显示出来。 我只是不希望发生任何事情,或者我想要其他事情发生。我怎样才能做到这一点?什么是最好(标准)的方式呢?

在伪代码中,我想要像:

if situation-is-not-good { 
    do-some-other-things
} else {
    Start-DetailViewController-Normally
}

2 个答案:

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