2016-05-02 2 views
1

У меня есть подкласс UIViewController, чтобы включить мою тематическую стратегию.Обнаружить, когда UITextFiled нарисован

То есть, все мои UIViewControllers продлить мою версию под названием MyUIViewController, который имеет override на viewWillLayoutSubviews. Поэтому, когда страница загружается, я могу вызвать мой метод setupView, который будет правильно устанавливать для меня мой фон и другие стили и анимации.

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

Основной вопрос: что такое UITextFieldsviewWillLayoutSubviews или viewDidLoad.

Некоторые решения:

В том случае, если нет ничего, что вызывается у меня есть следующие решения whihc я не очень нравится.

  1. Используя ViewController, перебирать все подвиды, что контроллер представления имеет, и если данный вид является типом UITextField, вызвать статический метод в моем расширении его установить свой стиль

  2. Регистрации мой подкласс UITextField с центром уведомлений, и когда я меняю тему, отправьте уведомление.

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

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

ответ

2

Метод func didMoveToSuperview() наследуется от класса UIView, просто переопределить его Anche проверить, если значение superview отличается от nil, это потребует подкласс UItextField.

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

Но мне кажется, что вы чрезмерны, можете ли вы объяснить немного больше, что вы пытаетесь сделать с текстовым полем?
[UPDATE]
Чтобы применить тему к просмотру контроллера всего вида, вы можете многое сделать. Простым способом было бы использовать NSNotification s и viewDidLoad() из вас контроллер.
Метод viewDidLoad() вызывается, когда ваш контроллер просмотра загрузил его представление, это означает, что если вы не добавляете представления во время выполнения, ваш пользовательский интерфейс будет загружен в это время.Здесь вы можете вызвать метод applyTheme(theme:ThemeObject) - конечно, вам нужно будет каким-либо образом передать ThemeObject - где вы можете применить настройку subviews. Если вы хотите изменить тему во время выполнения, вы также можете использовать NSNotification и отправить одну из тем, как только пользователь сделает свой выбор тем. Все зарегистрированные наблюдатели могут вызвать метод applyTheme(theme:ThemeObject) и добавить их настройку.
Если вы хотите немного отвлечься от поведения, вы можете создать протокол «Themable» и добавить реализации для каждого вида подкласса UIView в расширениях вашего протокола.

Я просто хочу также помнить, что UIKit обеспечить аналогичный протокол, называемый UIApperence, прибегая к помощи вы можете найти custom implementations, это действительно мощный протокол стоит дал посмотреть.

+0

Пользователи могут выбрать «Тема», которую они хотели бы иметь в своем приложении. В настоящее время это означает цвет шрифта и фона. Это означает, что мне нужно изменить шрифт, цвет шрифта, размер шрифта и цвет границы. Я хотел бы услышать, если у вас есть другой подход к этому. Мне это тоже кажется сложным. – Cripto

+0

Я обновил ответ – Andrea

+1

Мне потребовалось некоторое время, чтобы попробовать свой ответ. Может подтвердить, что он работает. – Cripto

Смежные вопросы