"Разве UIView
уже не делегирует моему контроллеру представления через IBAction
? Код, кажется, работает, если я ничего не указываю для моего UIView
делегата".
Похоже, вы путаете идею механизма целевого действия с делегированием.Хотя в некотором смысле вы можете думать о target-action как о «делегировании», это будет только в самом общем смысле слова в том смысле, что именно target (обычно контроллер) обрабатывает и реализует действие (сообщение).Однако программист Какао, вероятно, воздержится от объяснения механизма целевого действия, используя это конкретное слово - делегирование - поскольку было бы слишком легко спутать его с фактическим Делегирование .
Когда вы«Подключить» кнопки и элементы управления в nib-файле для вызова методов IBAction
в вашем объекте контроллера, это всего лишь механизм целевого действия в действии.Как вы видели, код работает, даже если вы «не указываете ничего для моего UIView
делегата», поскольку target-action не включает делегирование (в какао-смысле этого слова).
Делегирование обычно используется как более простая альтернатива использованию подклассов для реализации желаемого поведения.Например, вместо того, чтобы создавать собственный настраиваемый подкласс UITableView
, чтобы он знал, какие данные вы хотите отобразить, вы можете простоиспользуйте простой класс UITableView
, установите его delegate
в класс контроллера, и пусть класс контроллера реализует требуемые / желаемые назначенные методы делегата. Использование подклассов для достижения этой цели может стать сложным, поскольку при создании подкласса вам необходимоиметь полное представление о цепочке наследования и о том, как работают все суперклассы.