是否可以延迟和/或取消UISplitViewController的Show Detail segue?

时间:2015-11-21 18:17:31

标签: ios uisplitviewcontroller

我想使用UISplitViewController在主视图中显示可连接设备的列表,并在详细视图中显示从所选设备检索的信息。

为此,当用户点击设备时,我需要尝试连接到该设备。如果不成功,则无法显示任何内容,我会显示错误消息。如果成功,我将从设备中读取数据并在详细视图中显示该数据。

点击主视图中的条目后,UISplitViewController的显示详细信息似乎会立即自动触发。我可以以某种方式拦截这个以添加连接/读取所需的逻辑吗?如果没有,我可以采用哪种替代方法?

1 个答案:

答案 0 :(得分:0)

在ViewController中,您可以覆盖shouldPerformSegueWithIdentifier

class Foo: UIViewController {
    func doAsynchStuff(completion: (canProceed:Bool)->()) {
    // ...
    }

    override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
        if everythingOK {
            return true
        } else {
            // do your stuff
            doAsynchStuff({ (canProceed) -> () in
                if canProceed {
                    self.performSegueWithIdentifier(identifier, sender: sender)
                } else {
                    // present error message
                }
            })
            return false
        }
    }
}

如果您返回true,将执行segue,否则您:

  1. 运行您的异步代码
  2. 调用performSegueWithIdentifier,当异步函数完成后,你决定你在做什么看结果
  3. 返回false取消当前的segue