2011-03-21 14 views
9

BOOL'u [NSArray makeObjectsPerformSelector:withObject:] parametresine geçirmek istiyorum. Örneğin.Geçme BOOL'u makeObjectsPerformSelector: withObject:

[buttons makeObjectsPerformSelector:@selector(setEnabled:) withObject: NO]; 

Yukarıdaki kod işe yaramaz çünkü withObject yalnızca kimliği kabul eder.

Bunu yapmanın doğru yolu nedir?

bu bazı kod görülme: Bu 4.2 simülatörü üzerinde çalışıyor ancak 4.2 iphone başarısız

[buttons makeObjectsPerformSelector:@selector(setEnabled:) withObject: (id)kCFBooleanTrue]; 
[buttons makeObjectsPerformSelector:@selector(setEnabled:) withObject: (id)kCFBooleanFalse]; 

.

cevap

10

SetEnabled: nesnesini kullanmanıza izin veren bir UIButton (veya UIView) kategorisi yazabilirsiniz.

@interface UIButton(setEnabledWithObject) 
- (void)setEnabledWithNSNumber:(NSNumber *)bNum; 
@end 

@implementation UIButton(setEnabledWithObject) 
- (void)setEnabledWithNSNumber:(NSNumber *)bNum { 
    [self setEnabled:[bNum boolValue]]; 
} 
@end 

ve sonra ben bir hatırlama

[buttons makeObjectsPerformSelector:@selector(setEnabledWithNSNumber:) withObject:[NSNumber numberWithBool:NO]]; 
[buttons makeObjectsPerformSelector:@selector(setEnabledWithNSNumber:) withObject:[NSNumber numberWithBool:YES]]; 
+0

Teşekkürler! Bu çalışacak. Bunu yapmanın daha basit bir yolu olmasını isterdim. –

5

kullanabilirsiniz sadece withObject:@YES daha başka bir şey yapmak zorunda ama artık anladım bulamıyorum çünkü

ile de çalışır
[buttons enumerateObjectsUsingBlock:^(NSButton *item, NSUInteger idx, BOOL *stop) 
    {[item setEnabled:YES];}]; 

Veya hızlı/daha yaşlı/readabler :) yol:

for (NSButton *item in buttons) {[item setEnabled:YES];}; 

Bir enumerateObjectsUsingBlock Particularily kısa olmadığını bilmeli, ama her durumda burada büyük bir katil olmamalı :) hızlı istiyorsanız da

0

:) bir for (;;) bloğu ile, emin değilseniz bunu yapabilir BOOL parametrelerini statik link cevabından geçirerek yardımcı olacağım ..