我想将BOOL传递给[NSArray makeObjectsPerformSelector:withObject:]参数.例如
[buttons makeObjectsPerformSelector:@selector(setEnabled:) withObject: NO];
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用,因为withObject只接受id.
什么是正确的方法呢?
我看到了一些代码:
[buttons makeObjectsPerformSelector:@selector(setEnabled:) withObject: (id)kCFBooleanTrue];
[buttons makeObjectsPerformSelector:@selector(setEnabled:) withObject: (id)kCFBooleanFalse];
Run Code Online (Sandbox Code Playgroud)
这在4.2模拟器上工作正常但在4.2 iphone上失败.
Mat*_*uch 10
您可以编写一个UIButton(甚至UIView)类别,允许您将setEnabled:与对象一起使用.
@interface UIButton(setEnabledWithObject)
- (void)setEnabledWithNSNumber:(NSNumber *)bNum;
@end
@implementation UIButton(setEnabledWithObject)
- (void)setEnabledWithNSNumber:(NSNumber *)bNum {
[self setEnabled:[bNum boolValue]];
}
@end
Run Code Online (Sandbox Code Playgroud)
然后你可以使用
[buttons makeObjectsPerformSelector:@selector(setEnabledWithNSNumber:) withObject:[NSNumber numberWithBool:NO]];
[buttons makeObjectsPerformSelector:@selector(setEnabledWithNSNumber:) withObject:[NSNumber numberWithBool:YES]];
Run Code Online (Sandbox Code Playgroud)
我记得有一个人不得不做别的事情,withObject:@YES但由于我再也找不到了,我发现它的效果也很好
[buttons enumerateObjectsUsingBlock:^(NSButton *item, NSUInteger idx, BOOL *stop)
{[item setEnabled:YES];}];
Run Code Online (Sandbox Code Playgroud)
或更快/更旧/可读的:)方式:
for (NSButton *item in buttons) {[item setEnabled:YES];};
Run Code Online (Sandbox Code Playgroud)
应该知道enumerateObjectsUsingBlock不是特别快,但它不应该是一个巨大的杀手在这里:)如果你想要快,你也可以用for (;;)块,确保:)
| 归档时间: |
|
| 查看次数: |
7344 次 |
| 最近记录: |