Почему определенный протокол работает без класса, который его реализует?

Я довольно много работал с протоколами, такими как делегаты и источники данных, и недавно я работал над чем-то, используя UIKeyInput протокол. Я привык к таким вещам, как self.tableView.delegate = self но с UIKeyInput Мне это не нужно. Но методы протокола, которые я реализовал (например, insertText: и т.д.) тем не менее позвонили.

Может кто-нибудь объяснить мне, как это работает?

Большое спасибо за вашу помощь!

1 ответ

Решение

Платформа Cocoa Touch имеет концепцию "цепочки респондента", которая определяет, как доставлять события ввода пользовательского интерфейса. "Первый респондент" находится во главе цепочки респондентов. Когда iOS имеет событие ввода с клавиатуры, она проверяет, поддерживает ли текущий первый респондент протокол UIKeyInput, и вызывает эти методы, если это так.

Вам не нужно регистрироваться как UIKeyInputDelegate для другого объекта, потому что среда определяет получателя для этих сообщений в качестве первого респондента.

Другие вопросы по тегам