У меня есть NSTableview. Мне нужно включить кнопку, основанную на значении столбца в представлении таблицы. Например, в представлении таблицы у меня есть столбец «Статус». У меня есть 2 вида статуса, снятые и забронированные. Если я нажимаю на строку, которая имеет статус Withdrawn, мне нужно отключить кнопку отмены. Могу ли я сделать это через привязку? Как я могу это сделать? Pls помогает мне. Благодарю.Включить кнопку, основанную на значении в NSTableview
ответ
При создании пользовательского NSValueTransformer
вы можете включить или отключить кнопку с помощью привязок.
Вы можете связать Enabled
свойство кнопки следующим образом:
Привязать к: arrayController
Controller Key: selection
Модель Key Путь: status
Value Transformer: MDStatusValueTransformer
ПРИМЕЧАНИЕ: вместо arrayController
, вы должны выбрать любое имя вашего контроллера массива в файле nib. Вместо MDStatusValueTransformer
вы должны указать любое имя класса, которое вы назвали классом, указанным ниже.
Как я уже говорил, вам нужно будет создать пользовательский номер NSValueTransformer
. Включенное свойство ожидает BOOL
, завернутый в NSNumber
, но ваш status
- NSString
. Таким образом, вы создадите таможню NSValueTransformer
, которая проверит входящие status
NSString
и вернет NO
, если status
равно @"Withdrawn"
.
Обычай NSValueTransformer
должен выглядеть примерно так:
MDStatusValueTransformer.h:
@interface MDStatusValueTransformer : NSValueTransformer
@end
MDStatusValueTransformer.m:
@implementation MDStatusValueTransformer
+ (Class)transformedValueClass {
return [NSNumber class];
}
+ (BOOL)allowsReverseTransformation {
return NO;
}
- (id)transformedValue:(id)value {
if (value == nil) return nil;
if (![value isKindOfClass:[NSString class]]) return nil;
if ([value isEqualToString:@"Withdrawn"]) {
return [NSNumber numberWithBool:NO];
}
return [NSNumber numberWithBool:YES];
}
@end
@ user1999892: Вы имеете в виду, что есть способ сделать это, не указывая и не создавая настраиваемый трансформатор значений? – NSGod
Для осветления, кнопка под вопросом находится вне таблицы или он находится в представлении таблицы (на основе представления) в виде одной из ячеек таблицы таблиц столбца? Является ли это основанным на ячейках или основанным на представлении «NSTableView»? Вы в настоящее время поставляете значения в представление таблицы привязками к 'NSArrayController'? Какая ценность - «статус» (например, «NSString», нумерованный тип, «NSNumber» и т. Д.)? – NSGod
Кнопка расположена за пределами стола. Он основан на представлении. Я поставляю данные в виде таблицы привязками к NSArrayController. Статус имеет тип NSString. – user1999892