NSNotification / Наручники? - PullRequest
2 голосов
/ 04 июня 2009

Я пробираюсь через книги Хилграсса и Кочана. Проводя свои собственные эксперименты для дальнейшего обучения, я просто хочу создать интерфейс какао с 4 текстовыми полями, 3 из которых принимают числа, а 4-е отображает сумму остальных 3. Я могу сделать это с помощью кнопки, чтобы выполнить расчет, однако Вы хотите сделать это автообновлением каждый раз, когда один из 3 входов изменяется.

Я искал урок, который охватывает это, как в книгах, так и в Интернете, но не могу его найти, поэтому либо он действительно прост, и я что-то упускаю, либо не так просто. Похоже, что обычный способ сделать это с NSNotifactions, но это возможно возможно и с привязками?

Каким стандартным способом сделать это является какао, и есть ли урок, о котором кто-нибудь знает?

Ура, Morgan

Ответы [ 2 ]

3 голосов
/ 04 июня 2009

Глава 7: Кодирование значения ключа; Наблюдение значения ключа в «Hilgrass» «Программирование какао для Mac OS X» или документация Apple по кодированию значения ключа может помочь вам выполнить эту задачу.

Вот мой пример проекта xcode: http://dl.getdropbox.com/u/344540/stackoverflow/AutoAdd.zip. Вы можете контролировать, как происходит обновление, используя вкладку «Привязки» Инспектора для NSTextFields в Интерфейсном Разработчике. На этой вкладке есть и другие драгоценные камни.

0 голосов
/ 05 июня 2009

NSControl (и, следовательно, NSTextField) имеет уведомление NSControlTextDidChangeNotification, которое будет отправлено при каждом изменении текста.

Таким образом, вы можете зарегистрироваться для этого уведомления в трех текстовых полях, а затем обновить поле вычисления.

Я пошел немного дальше, создав подкласс NSTextField с именем ActionOnChangeTextField, который автоматически вызывает его действие при каждом изменении текста. Таким образом, вы просто устанавливаете класс трех текстовых полей в ActionOnChangeTextField и подключаете селектор к вашему методу вычисления обновления.

@interface ActionOnChangeTextField : NSTextField {

}

@end

@implementation ActionOnChangeTextField

- (void) doTextChangedAction:(NSNotification*)notification;
{
    [[self target] performSelector:[self action]];
}

- (void) awakeFromNib;
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(doTextChangedAction:)
                                                 name:NSControlTextDidChangeNotification
                                               object:self];
}

- (void) dealloc;
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}

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