行。在经典的iOS中这很容易做到这一点,但是WatchKit没有给出任何块/闭包,并且在有/无动画之间没有选择。
我有一个根控制器,它有一个选项列表。触摸其中一个选项(在手表或手机上)将关闭所有当前打开的控制器(popToRootController),然后立即关闭push a new one。
或多或少,如此:
self.popToRootController()
self.pushController(withName: "IKANHAZCHEEZEBURGR", context: nil)
问题是呼叫之间没有足够的时间,而且我没有lambda来执行信号量或推送控制器。
如果我单步执行调试器,它会发生,没问题。 如果我只是点击"跑,"没有用。 这就是所谓的a "heisenbug"。
我想我可以做一次性计时器,但这似乎是一个可怕的黑客,它实际上可能会导致原力的中断。
有更好的想法吗?我错过了什么?
我知道iOS有很多答案。在这里,他们没有给我带来很多好处。
答案 0 :(得分:0)
好吧,我屈服于黑暗面,并做了计时器黑客攻击。有用。我需要为每个打开的控制器提供大约0.4秒的时间。
这是我所做的近似:
self.popToRootController()
let _ = Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: #selector(self.timerCallback(_:)), userInfo: nil, repeats: false)
func timerCallback(_ timer: Timer) {
if let timerIndex = timer.userInfo as? Int {
if 0 <= timerIndex {
DispatchQueue.main.async {self.pushController(withName: "IKANHAZCHEEZEBURGR", context: nil)}
}
}
}
更新:我想提一下,即使这“解决了”我的问题,但这个问题甚至是一个问题也是一个问题。我的设计很糟糕,我正在重新设计基本导航。我将使用基于页面的方法,而不是这种分层设计。
一般原则上,如果我需要破解使其成功,我通常会以不同的方式做得更好。