2013-02-21 3 views
0

У меня есть NSTableview. Мне нужно включить кнопку, основанную на значении столбца в представлении таблицы. Например, в представлении таблицы у меня есть столбец «Статус». У меня есть 2 вида статуса, снятые и забронированные. Если я нажимаю на строку, которая имеет статус Withdrawn, мне нужно отключить кнопку отмены. Могу ли я сделать это через привязку? Как я могу это сделать? Pls помогает мне. Благодарю.Включить кнопку, основанную на значении в NSTableview

+0

Для осветления, кнопка под вопросом находится вне таблицы или он находится в представлении таблицы (на основе представления) в виде одной из ячеек таблицы таблиц столбца? Является ли это основанным на ячейках или основанным на представлении «NSTableView»? Вы в настоящее время поставляете значения в представление таблицы привязками к 'NSArrayController'? Какая ценность - «статус» (например, «NSString», нумерованный тип, «NSNumber» и т. Д.)? – NSGod

+0

Кнопка расположена за пределами стола. Он основан на представлении. Я поставляю данные в виде таблицы привязками к NSArrayController. Статус имеет тип NSString. – user1999892

ответ

1

При создании пользовательского NSValueTransformer вы можете включить или отключить кнопку с помощью привязок.

Вы можете связать Enabled свойство кнопки следующим образом:

Привязать к: arrayController

Controller Key: selection

Модель Key Путь: status

Value Transformer: MDStatusValueTransformer

ПРИМЕЧАНИЕ: вместо arrayController, вы должны выбрать любое имя вашего контроллера массива в файле nib. Вместо MDStatusValueTransformer вы должны указать любое имя класса, которое вы назвали классом, указанным ниже.

Как я уже говорил, вам нужно будет создать пользовательский номер NSValueTransformer. Включенное свойство ожидает BOOL, завернутый в NSNumber, но ваш status - NSString. Таким образом, вы создадите таможню NSValueTransformer, которая проверит входящие statusNSString и вернет 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 
+0

@ user1999892: Вы имеете в виду, что есть способ сделать это, не указывая и не создавая настраиваемый трансформатор значений? – NSGod

 Смежные вопросы

  • Нет связанных вопросов^_^