2013-03-24 3 views
2

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

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

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

+0

В каком классе вы реализовали 'UIKeyInput'? – driis

+0

Пользовательский подкласс 'UIView' – Dario

+0

Он как-то получил ручку. Может быть, в правую сторону/зиб? – danh

ответ

1

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

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

+0

Полностью имеет смысл! Огромное спасибо :) – Dario