這是我如何啓用/禁用NSMenuItem,具體取決於NSArrayController中項目的選擇。如何綁定NSArrayController選擇多個時禁用NSMenuItem?
不過,我想更多的一種情況下,禁用NSMenuItem:當選擇多。換句話說,如果選擇多個項目,則應該禁用它。
謝謝
這是我如何啓用/禁用NSMenuItem,具體取決於NSArrayController中項目的選擇。如何綁定NSArrayController選擇多個時禁用NSMenuItem?
不過,我想更多的一種情況下,禁用NSMenuItem:當選擇多。換句話說,如果選擇多個項目,則應該禁用它。
謝謝
你可以爲此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的子類名稱即可。
@讚的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);
}
爲什麼倒票? –
上面的代碼是錯誤的。你不應該把id分配給int。看到我下面的代碼的改進版本。 –
streber;)是的,你當然是對的! – bijan