Получить текст UITextView без делегата

Я попытался создать класс текстового представления автозаполнения местоположения, создав подкласс UITextField и используя API автозаполнения Google Place. Это прекрасно работает, но у меня есть ошибка проектирования из-за реализации. Чтобы наблюдать, когда пользователь вводит текст, я устанавливаю UITextFieldDelegate в self в пользовательском подклассе и отслеживаю изменения в набранном тексте в textView:shouldChangeTextInRange:replacementText:. Это работает, но вот ошибка дизайна: если кто-то теперь хочет проверить, что вводится в пользовательский подкласс, установив делегат на что-то новое, делегат моего класса больше не устанавливается на объект самого класса. Теперь пользовательский класс бесполезен. Есть ли способ получить текст в том виде, в котором он был напечатан без делегата, предотвратить изменение делегата или каким-либо другим образом решить мою проблему?

У меня есть несколько вариантов, которые могут работать, но плохо:

  • Регулярно проверяйте, что такое свойство text: должно быть очевидно, почему занятое ожидание — глупая идея.
  • Переопределите свойство делегата и установите его в частное: не уверен, что это вообще сработает, но если бы это сработало, класс больше не является надлежащим подклассом UITextField, и все методы делегата будут недоступны при реализации моего подкласса.
  • Предоставьте новый делегат для дальнейшего использования делегата: позволяет кому-то получить те же вещи, что и UITextFieldDelegate, но это все еще портит документацию и правильную реализацию UITextField.

person Jorn    schedule 29.11.2015    source источник


Ответы (1)


Делегаты в UIKit я обычно подключаю один к одному. Что может вызвать проблему, которую вы описали.

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

в этом посте показан пример кода о том, как вести список из нескольких делегатов.

Делегирование нескольким объектам

person madmik3    schedule 29.11.2015