Как установить значения Cocoa NSLevelIndicatorCell? - PullRequest
0 голосов
/ 13 октября 2009

У меня есть таблица. Один из столбцов в табличном представлении использует NSLevelIndicatorCell.

Я хочу, чтобы пользователь мог редактировать предупреждения и критические значения для индикатора уровня таким образом, чтобы при вводе значения в текстовое поле «уровень предупреждения» он изменял значение предупреждения, отображаемое в индикаторах уровня. ВСЕ строки таблицы.

Я очень новичок в Objective-C, поэтому все, что я могу до сих пор выяснить, - это то, что мне нужен метод делегата для просмотра текстового поля, НО, если мне удастся это сделать, как же мне отправить новое значение в конкретный столбец табличного представления, чтобы обновление происходило со ВСЕМИ строками (т. е. как я могу отправить какое сообщение в табличное представление и нацелить ячейку в столбце в табличном представлении)?

Вот код решения, которое я придумал, если оно кому-нибудь понадобится.

- (IBAction)setWarningLevel:(id)sender {
    double v;
    NSScanner *ns = [NSScanner scannerWithString:[warnLevel stringValue]];
    [ns scanDouble:&v];
    [levelIndicator setWarningValue:v];
}  

Ответы [ 2 ]

2 голосов
/ 13 октября 2009

Это учебное пособие для использования привязок Какао . Просто свяжите значение текстового поля с NSLevelIndicatorCell в табличном представлении (сделайте это в Интерфейсном Разработчике). Обновления должны происходить автоматически.

I думаю, должно применяться ко всем ячейкам в табличном представлении, если вы применяете привязку к ячейке в IB. Однако, если это не так, вам нужно будет написать пару строк кода, которые устанавливают привязку каждый раз, когда создается новая строка в таблице. Эта ссылка выше объяснит все подробно, но в основном вы будете устанавливать отношение наблюдателя ключ-значение в коде между текстовым полем и экземпляром индикатора уровня в создаваемой строке.

1 голос
/ 14 октября 2009

Думаю, вы перестарались.

NSTextField подклассы NSControl, поэтому вам нужно поискать в документации по NSControl полезную функцию.

Попробуйте переписать это так; при условии, что вы берете значение из текстового поля warnLevel.

- (IBAction)setWarningLevel:(id)sender {
    double v = [warnLevel doubleValue];
    [levelIndicator setWarningValue:v];
}

Хотя обычно это сокращается до этого;

- (IBAction)setWarningLevel:(id)sender {
    [levelIndicator setWarningValue:[warnLevel doubleValue]];
}

У вас, вероятно, должна быть некоторая проверка того, что текстовое поле имеет действительный номер. Если вы выбираете только пару чисел, обратите внимание на использование шагового регулятора.

Обычно, с Какао, если вы чувствуете, что прыгаете через слишком много обручей, иногда есть более простой способ.

Обычно; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...