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