【发布时间】:2012-01-29 17:24:44
【问题描述】:
我将描述我正在尝试做的一般情况(以防有更好的方法),然后是我遇到的绊脚石(以防我的方法是最好的方法)。
我想做的事:我想向我的撤消管理器添加一个有时间限制的调用。如果在时限内没有触发undo,那么摇动设备时就无法使用undo,因此什么也不会发生。
我在做什么:我的方法是使用NSUndoManager 和NSTimer。当我将调用添加到撤消管理器时,我也启动了一个 5 秒计时器。当计时器触发时,它会检查!self.undoManager.isUndoing,如果它是真的,那么它会继续并从撤消管理器中删除所有操作。在模拟器中对其进行测试有效:摇动手势会在 5 秒之前启动撤消,但不会在之后。
问题是,如果我在 5 秒限制下得到一个摇动手势,撤消管理器会显示警报,但是如果用户等待直到 5 秒限制之后才真正点击撤消按钮,什么也没有发生:即使警报视图是可见的,计时器也会愉快地清除堆栈。
有没有办法检查警报视图是否可见?最好是如果我能弄清楚用户是否也点击了撤消或取消,并在按下取消按钮时清除撤消管理器的操作堆栈。
或者除了以这种方式使用计时器之外还有更好的方法吗?
谢谢!
编辑添加:我的另一个想法是自己捕获抖动事件(通过motionEnded:withEvent: 调用)并手动管理警报和撤消堆栈。与上述相比,也欢迎对此提出想法。
【问题讨论】:
-
我认为使用motionEnded:withEvent 方法是可行的方法。 UIAlertView 基本上是一个 UIWindow,也许您可以检查您的主应用程序的窗口何时再次变为键,以便您知道撤消警报视图已被解除。
-
嗯,好点子。我想我会选择motionEnded的东西。如果它有效,我会在这里回复。谢谢!
标签: objective-c ios cocoa-touch nstimer nsundomanager