Spec-Zone .ru
спецификации, руководства, описания, API
Библиотека разработчика Mac Разработчик
Поиск

Реализация методов действия

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

image: ../Art/TrackMixUpdateUI.png

Реализуйте takeFloatValueForVolumeFrom: Метод

Текстовое поле и ползунок оба отправляют a takeFloatValueForVolumeFrom: обменивайтесь сообщениями делегату приложения. Но метод еще не обновляет объем дорожки или другие элементы UI.

bullet
Реализовать takeFloatValueForVolumeFrom: метод
  • В AppDelegate.m файл, измените реализацию takeFloatValueForVolumeFrom: метод следующим образом:

    - (IBAction)takeFloatValueForVolumeFrom:(id)sender {
        float newValue = [sender floatValue];
        [self.track setVolume:newValue];
        [self updateUserInterface];
    }

Существует несколько частей к этому методу:

Заметьте, что XCode показывает значок ошибки для [self updateUserInterface]; оператор. Это делает это, потому что Вы не объявили или реализовали updateUserInterface метод все же. Вы сделаете обоих затем.

image: ../Art/27c_compilererror.png

Реализуйте updateUserInterface Метод

Информация, показанная в пользовательском интерфейсе, должна быть сохранена синхронизируемой с тем, что сохранено в модели. В этом приложении уровень громкости показан в двух местах. Могло бы быть заманчиво позволить одному из них обновить другой непосредственно, но выполнение так имеет тенденцию быть трудным поддержать и отладить. Лучший способ сохранить пользовательский интерфейс непротиворечивым состоит в том, чтобы всегда использовать значение в объекте модели как истинное значение и синхронизировать все в пользовательском интерфейсе против него. В этой реализации Вы используете текстовое поле и выходы ползунка, которые Вы создали ранее.

bullet
Синхронизировать пользовательский интерфейс
  1. В AppDelegate.h файл, объявите updateUserInterface метод следующим образом:

    - (void)updateUserInterface;
  2. В AppDelegate.m файл, как раз перед @end оператор, реализуйте updateUserInterface метод следующим образом:

    - (void)updateUserInterface {
     
        float volume = [self.track volume];
        [self.textField setFloatValue:volume];
        [self.slider setFloatValue:volume];
    }

    Метод сначала получает объем дорожки, затем устанавливает это как значение плавающее и текстового поля и ползунка.

  3. Выполните приложение.

    Приложение должно вести себя, как Вы ожидаете. Перемещение ползунка должно обновить значение, показанное в текстовом поле, и ввод нового значения в текстовом поле (и щелчок по Return) должен обновить ползунок.

Следующая задача состоит в том, чтобы реализовать метод действия для кнопки.

Реализуйте бесшумный режим: Метод

Реализация mute: метод следует за тем же образцом как takeFloatValueForVolumeFrom: метод, за исключением того, что обнуляется объем дорожки.

bullet
Реализовать и протестировать бесшумный режим: метод
  1. В AppDelegate.m файл, измените реализацию mute: метод следующим образом:

    - (IBAction)mute:(id)sender {
        [self.track setVolume:0.0];
        [self updateUserInterface];
    }
  2. Выполните приложение.

    Нажатие Кнопки отключения звука должно теперь регулировать громкость дорожки, текстовое поле, и ползунок оценивает нулю.

Несмотря на то, что приложение, кажется, работает правильно теперь, существует одна тонкая ошибка. В установке файла пера Вы ввели начальные значения для текстового поля и ползунка (оба были установлены в 5). Когда приложение запускается, однако, дорожка создается, и ее объем обнуляется. Необходимо гарантировать, что пользовательский интерфейс и значения модели должным образом синхронизируются в запуске.

Сделайте пользовательский интерфейс непротиворечивым в запуске

Чтобы гарантировать, что пользовательский интерфейс является соответствующим значениям модели в запуске, можно вызвать updateUserInterface метод после создания отслеживаемого объекта.

bullet
Гарантировать, что приложение является непротиворечивым в запуске
  1. В AppDelegate.m файл, обновите applicationDidFinishLaunching: метод для вызова updateUserInterface после установки track свойство.

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
        Track *aTrack = [[Track alloc] init];
        [self setTrack:aTrack];
        [self updateUserInterface];
    }
  2. Выполните приложение.

    Приложение должно обычно вести себя, как оно сделало прежде, за исключением того, что, когда оно запускается, оно выводит на экран значение 0, а не 5.

Резюме

Вы реализовали методы делегата приложения, обеспечивающие базовую функциональность приложения — обновление многократных представлений, когда изменяются данные модели.

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