是否可以延迟 and/or 取消 UISplitViewController 的 Show Detail segue?
Is it possible to delay and/or cancel a Show Detail segue for UISplitViewController?
我想使用 UISplitViewController
在主视图中显示可连接设备的列表,并在详细视图中显示从选定设备检索到的信息。
为此,当用户点击设备时,我需要尝试连接到该设备。如果不成功,将不会显示任何内容,并且会显示一条错误消息。如果成功,我将从设备读取数据并在详细视图中显示。
来自 UISplitViewController
的 Show Detail segue 似乎在点击主视图中的条目后立即自动触发。我能以某种方式截取它来为 connection/read 添加必要的逻辑吗?如果没有,我有什么替代方法可以做到这一点?
在您的 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
}
}
}
如果你 return true
将执行 segue,否则你:
- 运行 你的异步代码
- 调用
performSegueWithIdentifier
,当异步函数完成后,您可以根据结果决定要做什么
- return
false
取消当前segue
我想使用 UISplitViewController
在主视图中显示可连接设备的列表,并在详细视图中显示从选定设备检索到的信息。
为此,当用户点击设备时,我需要尝试连接到该设备。如果不成功,将不会显示任何内容,并且会显示一条错误消息。如果成功,我将从设备读取数据并在详细视图中显示。
来自 UISplitViewController
的 Show Detail segue 似乎在点击主视图中的条目后立即自动触发。我能以某种方式截取它来为 connection/read 添加必要的逻辑吗?如果没有,我有什么替代方法可以做到这一点?
在您的 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
}
}
}
如果你 return true
将执行 segue,否则你:
- 运行 你的异步代码
- 调用
performSegueWithIdentifier
,当异步函数完成后,您可以根据结果决定要做什么 - return
false
取消当前segue