我想稍微延迟在表格视图上调用setEditing:animated:
。通常,我会使用performSelector:withObject:afterDelay:
但
setEditing:animated:
的第二个参数是原始BOOL - 而不是对象过去我会在自己的课堂上创建一个虚拟方法,比如setTableAnimated
,然后调用[self performSelector:@selector(setTableAnimated) withObject:nil afterDelay:0.1f
,但这对我来说很麻烦。
有更好的方法吗?
答案 0 :(得分:19)
为什么不使用dispatch_queue?
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[tableView setEditing …];
});
答案 1 :(得分:16)
您需要使用NSInvocation
:
请参阅此answer中的代码,我稍微更改了一下以符合您的问题:
BOOL yes = YES;
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[self.tableView methodSignatureForSelector:@selector(setEditing:Animated:)]];
[inv setSelector:@selector(setEditing:Animated:)];
[inv setTarget:self.tableView];
[inv setArgument:&yes atIndex:2]; //this is the editing BOOL (0 and 1 are explained in the link above)
[inv setArgument:&yes atIndex:3]; //this is the animated BOOL
[inv performSelector:@selector(invoke) withObject:nil afterDelay:0.1f];
答案 2 :(得分:1)
选择器setEditing:animated:
与performSelector:withObject:afterDelay
不兼容。你只能调用带有0或1个参数的方法,参数(如果有的话)必须是一个对象。所以你的解决方法是要走的路。您可以将BOOL值包装在NSValue
对象中,并将其传递给setTableAnimated
方法。
答案 3 :(得分:0)
如果您可以了解它,请使用NSInvocation抓取器来创建一个调用对象&使用1行而不是多行来调用它:http://overooped.com/post/913725384/nsinvocation