2012-05-30 68 views

回答

0

你可以爲此NSValueTransformer的子類!

實施將是這個樣子:

@implementation CountToEnabledTransformer 


+ (Class)transformedValueClass { 

    return [NSNumber class]; 
} 
+ (BOOL)allowsReverseTransformation { 

    return NO; 
} 
- (id)transformedValue:(id)value{ 

    int count = value; 
    BOOL boolValue = 0; 

    if ((count > 1) || (count == 0)) { 
     boolValue = 0; 
    }else { 
     boolValue = 1; 
    } 

    NSNumber *boolNumber = [NSNumber numberWithBool:boolValue]; 



return boolNumber; 
} 
@end 

這需要在@count值,執行if語句,並返回一個適當的布爾值,你enabled屬性綁定到。

不要忘記註冊新創建的NSValueTransformer sublclass:

[NSValueTransformer setValueTransformer:[[CountToEnabledTransformer alloc] init] forName:@"CountToEnabledTransformer"]; 

一個好地方,做到這一點是- (void)applicationDidFinishLaunching,所以它已經註冊,當筆尖試圖綁定到它!

之後,只需在IB綁定檢查器中的相應文本字段中鍵入NSValueTranformer的子類名稱即可。

+0

上面的代碼是錯誤的。你不應該把id分配給int。看到我下面的代碼的改進版本。 –

+0

streber;)是的,你當然是對的! – bijan

1

@讚的transformedValue:方法還有待改進:

- (id)transformedValue:(id)value{ 

    if(value == nil) 
    { 
     return @(NO); 
    } 

    if([value respondsToSelector:@selector(unsignedIntegerValue)] == NO) 
    { 
     return @(NO); 
    } 

    NSUInteger count = [value unsignedIntegerValue]; 
    return @(count > 0); 
} 
+0

爲什麼倒票? –

相關問題