Я смущен цепочкой респондента iPhone. А именно, в руководстве обработки событий iPhone http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/EventHandling/EventHandling.html у нас есть следующее:
Первый респондент является объектом респондента в приложении (обычно объект UIView), который определяется, чтобы быть первым получателем событий кроме сенсорных событий.
Но UIView является подклассом UIResponder. И ссылка класса UIResponder говорит это:
- (BOOL)canBecomeFirstResponder
Возвращаемое значение
ДА, если получатель может стать первым респондентом, НЕТ иначе. Обсуждение
Возвраты НЕ по умолчанию. Если объект респондента возвращает ДА из этого метода, это становится первым респондентом и может получить сенсорные события и сообщения действия. Подклассы должны переопределить этот метод, чтобы смочь стать первым респондентом.
Я смущен очевидным противоречием. Кто-либо может разрешить его для меня?
Если это имеет значение я действительно настраивал простое основанное на представлении приложение и называл canBecomeFirstResponder и isFirstResponder на его представлении. Оба возвратились НЕТ.
Это означает, что базовый UIView не может стать первым помощником - он ничего не делает с событиями движения, сообщениями меню редактирования и т.д.
Некоторые подклассы UIView (например, UITextView) могут стать первым реагирующим, и вы можете написать свой собственный подкласс UIView, который тоже это делает.
Номенклатура может сбивать с толку. Вместо «первого респондента» подумайте об этом как о «начальной цели события», то есть объект, который является первым респондентом, становится начальной целью для всех событий. В некоторых API это также называется «фокус», хотя в API Apple он обычно зарезервирован для описания окон.
В любой момент времени в приложении есть только один первый респондент / начальное событие-цель. Только отдельные объекты / экземпляры могут стать целью первого реагирования / начального события. Классы могут просто определять, имеет ли их экземпляр возможность стать первым респондентом / исходной целью-событием. Класс должен только предоставить возможность стать первым ответчиком / исходным событием-целью приложения, если это имеет смысл. Например, текстовому полю, очевидно, необходима возможность перехвата событий, чтобы оно могло использовать это событие для редактирования самого себя. Напротив, статическая метка не нуждается в такой возможности.
То, наследуется ли конкретный класс от NSResonder, не имеет никакого отношения к тому, разрешит ли класс (или конкретный экземпляр класса) быть установленным как первый респондент / начальная цель-событие. Эта способность исходит исключительно из ответа экземпляра на сообщение canBecomeFirstResponder
. Один и тот же экземпляр может отказаться от роли первого респондента / начальной цели события при одном наборе условий, а затем разрешить это позже, когда условия изменятся. Классы, конечно, могут при желании закрепить статус.
Другими словами, первый респондент / начальное-событие-цель - это состояние конкретного экземпляра в конкретное время.Первый ответчик / начальная цель-событие похожа на горячую картошку или токен, который передается от экземпляра к экземпляру в пользовательском интерфейсе. Некоторые классы вообще отказываются брать горячий картофель. Некоторые всегда это делают, а другие иногда хватаются за это и игнорируют другие.