Реализация методов действия
Методы действия делегата приложения должны синхронизировать громкость аудиотрека, которую пользователь регулирует в одном элементе UI со значениями, выведенными на экран другими элементами UI. Когда пользователь щелкает по Кнопке отключения звука, объем дорожки, выведенный на экран текстовым полем и ползунком, должен быть обнулен. Точно так же, если пользователь вводит объем в текстовое поле или перемещает ползунок, другой элемент UI должен отразить это изменение. В шаблоне разработки Контроллера представления Модели это - ответственность контроллера (т.е. делегат приложения) для реализации этого поведения.

Реализуйте takeFloatValueForVolumeFrom: Метод
Текстовое поле и ползунок оба отправляют a takeFloatValueForVolumeFrom: обменивайтесь сообщениями делегату приложения. Но метод еще не обновляет объем дорожки или другие элементы UI.
В
AppDelegate.mфайл, измените реализациюtakeFloatValueForVolumeFrom:метод следующим образом:- (IBAction)takeFloatValueForVolumeFrom:(id)sender {float newValue = [sender floatValue];
[self.track setVolume:newValue];
[self updateUserInterface];
}
Существует несколько частей к этому методу:
float newValue = [sender floatValue];Эта строка получает значение отправителя плавающее и хранит его в локальной переменной.
senderтекстовое поле или ползунок, отправивший это сообщение.[self.track setVolume:newValue];Эта строка регулирует громкость дорожки к новому значению.
[self updateUserInterface];Эта строка вызывает новый метод, чтобы гарантировать, что пользовательский интерфейс является соответствующим значению объема дорожки.
Метод еще не существует. Вы могли поместить код здесь, но схожая функциональность будет требоваться в
mute:метод; размещение кода в его собственном методе означает, что Вы должны записать его только один раз.
Заметьте, что XCode показывает значок ошибки для [self updateUserInterface]; оператор. Это делает это, потому что Вы не объявили или реализовали updateUserInterface метод все же. Вы сделаете обоих затем.

Реализуйте updateUserInterface Метод
Информация, показанная в пользовательском интерфейсе, должна быть сохранена синхронизируемой с тем, что сохранено в модели. В этом приложении уровень громкости показан в двух местах. Могло бы быть заманчиво позволить одному из них обновить другой непосредственно, но выполнение так имеет тенденцию быть трудным поддержать и отладить. Лучший способ сохранить пользовательский интерфейс непротиворечивым состоит в том, чтобы всегда использовать значение в объекте модели как истинное значение и синхронизировать все в пользовательском интерфейсе против него. В этой реализации Вы используете текстовое поле и выходы ползунка, которые Вы создали ранее.
В
AppDelegate.hфайл, объявитеupdateUserInterfaceметод следующим образом:- (void)updateUserInterface;
В
AppDelegate.mфайл, как раз перед@endоператор, реализуйтеupdateUserInterfaceметод следующим образом:- (void)updateUserInterface {float volume = [self.track volume];
[self.textField setFloatValue:volume];
[self.slider setFloatValue:volume];
}
Метод сначала получает объем дорожки, затем устанавливает это как значение плавающее и текстового поля и ползунка.
Выполните приложение.
Приложение должно вести себя, как Вы ожидаете. Перемещение ползунка должно обновить значение, показанное в текстовом поле, и ввод нового значения в текстовом поле (и щелчок по Return) должен обновить ползунок.
Следующая задача состоит в том, чтобы реализовать метод действия для кнопки.
Реализуйте бесшумный режим: Метод
Реализация mute: метод следует за тем же образцом как takeFloatValueForVolumeFrom: метод, за исключением того, что обнуляется объем дорожки.
В
AppDelegate.mфайл, измените реализациюmute:метод следующим образом:- (IBAction)mute:(id)sender {[self.track setVolume:0.0];
[self updateUserInterface];
}
Выполните приложение.
Нажатие Кнопки отключения звука должно теперь регулировать громкость дорожки, текстовое поле, и ползунок оценивает нулю.
Несмотря на то, что приложение, кажется, работает правильно теперь, существует одна тонкая ошибка. В установке файла пера Вы ввели начальные значения для текстового поля и ползунка (оба были установлены в 5). Когда приложение запускается, однако, дорожка создается, и ее объем обнуляется. Необходимо гарантировать, что пользовательский интерфейс и значения модели должным образом синхронизируются в запуске.
Сделайте пользовательский интерфейс непротиворечивым в запуске
Чтобы гарантировать, что пользовательский интерфейс является соответствующим значениям модели в запуске, можно вызвать updateUserInterface метод после создания отслеживаемого объекта.
В
AppDelegate.mфайл, обновитеapplicationDidFinishLaunching:метод для вызоваupdateUserInterfaceпосле установкиtrackсвойство.- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {Track *aTrack = [[Track alloc] init];
[self setTrack:aTrack];
[self updateUserInterface];
}
Выполните приложение.
Приложение должно обычно вести себя, как оно сделало прежде, за исключением того, что, когда оно запускается, оно выводит на экран значение 0, а не 5.
Резюме
Вы реализовали методы делегата приложения, обеспечивающие базовую функциональность приложения — обновление многократных представлений, когда изменяются данные модели.
Следующая задача состоит в том, чтобы посмотреть более близко на то, как приложение ведет себя, чтобы видеть, мог ли бы быть улучшен пользовательский опыт.
© 2013 Apple Inc.Все права защищены. (Последнее обновление: 23.04.2013)