Делегаты отлично подходят для отправки и получения данных между двумя объектами. Его можно использовать, чтобы классы явно соответствовали требуемым функциям протокола. Например, UITableView
, его необходимо, чтобы вы хотя бы позволили TableView сколько строк, секций и каких ячеек заполнить в этих индексах.
1. Однако с UITextFieldDelegate
его просто хороший способ документировать события, которые происходят.
2. IBAction доступен, только если вы делаете что-то через построитель интерфейсов. Он связывает действия, которые находятся внутри родительского класса UIControl (UITextField
), чтобы вы могли получать пользовательские события ввода/действия и связывать их в коде. Использование IBAction упрощает ваш код (потому что для написания кода меньше кода)
3. controlName.addTarget (...) - это программный способ обработки ссылки IBAction. Моя рекомендация заключается в том, что вы собираетесь с помощью раскадровки/интерфейса с помощью IBAction. Легче, что, если вы удаляете объект с вашего раскадровки, он автоматически отключает цель/действие.
Установка целей на самом деле является частью класса UIControl, и если ваш тип объекта не основан на UIView (или что-то, что наследуется от UIControl), вы, очевидно, не можете использовать addTarget (...), но ваш вариант должен использовать пользовательский делегат/протокол.
UIControl обычно используется для указания объектов при изменении представления пользователем. События перечислены в этом document.
Схема дизайна делегирования/протокола намного более гибкая. Например, если вы хотите, чтобы пользователь не вводил символы, реализуя textField(textField:,shouldChangeCharactersInRange:,replacementString:) -> Bool
, где, поскольку UIControl может действительно только сказать вам, было ли изменено текстовое поле.