Обновление UILabel из другого класса
-
05-07-2019 - |
Вопрос
Я довольно новичок в разработке для iPhone и все еще думаю о Objective-C, поэтому, пожалуйста, потерпите меня :)
Я пытаюсь изменить текст метки внутри объекта, который принадлежит контроллеру основного представления. Ммм. Я думаю, это звучит правильно.
Для тех из вас, кто знаком с классом AQRecorder
из Пример SpeakHere в справочной библиотеке iPhone : -
Я пытаюсь обновлять метку каждый раз, когда вызывается AQRecorder :: MyInputBufferHandler
(т.е. когда заполнены входные буферы)
Моим первым подходом было изменение класса AQRecorder
, чтобы он содержал UILabel *
, который я отправляю в качестве параметра модифицированному конструктору. Это сработало, но это было очень неправильно. И теперь, когда я хочу изменить пару различных компонентов пользовательского интерфейса, я надеялся, что есть лучший способ.
У меня такое ощущение, что мне не хватает чего-то простого. Это или я собираюсь потребовать немного рефакторинга.
Решение
Изучите использование <код> NSNotificationCenter код> . Он предоставляет разъединенные уведомления, поэтому классу рекордера не нужно ничего знать о пользовательском интерфейсе.
Другие советы
Кроме уведомлений (как предложено Кристофером), которые очень удобны, если у вас есть " глобальный " уведомления с возможно несколькими наблюдателями, классический подход, который приходит на ум - делегирование.
В вашем случае класс, который обрабатывает событие ( AQRecorder
?), может определять протокол делегирования и иметь свойство делегата, тогда как класс, владеющий UILabel
(ваш контроллер основного вида?) может реализовать этот протокол и обновить метку в реализации протокола (или сделать все остальное, что нужно сделать).