我正在显示一个包含按钮的UIView,为用户提供撤消操作的选项。视图保持可见几秒钟,然后关闭。我正在创建视图如下:
[self performSelector:@selector(endUndoOption) withObject:self afterDelay:delay];
然后在必要时使用以下内容取消它:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(endUndoOption) object:self];
有没有办法确定是否安排了一项操作(在这种情况下,是endUndoOption)?或者如果计时器已经开始?目前我正在使用BOOL标志这样做但是想知道是否有办法检查是否有一个排队?谢谢!
答案 0 :(得分:2)
如果你检查Cocoa Pods(http://cocoapods.org)BlocksKit pod http://zwaldowski.github.io/BlocksKit/,NSObject上有一个特殊的类别,有两个非常有用的方法:
+ (id)bk_performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay;
返回一个取消句柄的id。
和
+ (void)bk_cancelBlock:(id)handle;
取消预定的演出。
因此,要实现目标,可以将取消句柄存储在某些属性中,例如
self.endUndoCancellationHandle = [[self class] bk_performBlock:^{
[self endUndoOption];
self.endUndoCancellationHandle = nil;
} afterDelay:delay];
然后取消:
if (self.endUndoCancellationHandle)
{
[[self class] bk_cancelBlock:self.endUndoCancellationHandle];
self.endUndoCancellationHandle = nil;
}
要检查是否安排了某些内容,只需检查您当前是否有句柄:
if (self.endUndoCancellationHandle)
{
...
}