2011-09-07 2 views
8

Я запутался о severals первых иммунокомпетентных точек:Понимание системной логики для первой реагирующей

  1. Если я позвоню - becomeFirstResponder, делает системный вызов – canBecomeFirstResponder первым? Зачем?
  2. Почему существуют - becomeFirstResponder и – canBecomeFirstResponder? В каких ситуациях они могут возвращать разные значения?
  3. Должно ли приложение иметь первый ответчик в любое время? Если да, то что происходит, когда я вызываю – resignFirstResponder на какой-нибудь объект? UIApplication мгновенно становится первым ответчиком или это «токен», брошенный в какой-то момент в цепочке ответчиков? Могу ли я позвонить - becomeFirstResponder на объект UIApplication, когда я хочу избавиться от этого токена паломника?
  4. ...

Пожалуйста, кто-нибудь объяснить мне, как система управляет первым ответчиком. Что происходит под капотом, когда какой-то объект становится первым ответчиком, что когда уходит в отставку первым ответчиком. Какие вызовы делает система ... Спасибо!

ответ

6
  1. Реализация по умолчанию becomeFirstResponder действительно вызывает canBecomeFirstResponder. Это связано с тем, что ответчик, который возвращает NO от canBecomeFirstResponder, не должен быть первым ответчиком.
  2. becomeFirstResponder сделает приемник фактически первым ответчиком, если он преуспеет. canBecomeFirstResponder просто проверяет, желает ли приемник быть первым ответчиком, фактически ничего не меняя. Возможно, что becomeFirstResponder может потерпеть неудачу, если текущий первый ответчик отказывается уйти в отставку. Могут быть и другие ситуации, когда becomeFirstResponder также может потерпеть неудачу.
  3. В вашем коде не должно быть ничего, у которого есть статус первого ответчика. Судя по частному методу UIResponder firstResponder, в этом случае система не назначает никаких конкретных дефолтов.

В принципе, когда кто-то хочет стать первым ответчиком, текущий первый ответчик (если есть) попросят уйти в отставку, а затем новый объект станет первым ответчиком. Это может привести к тому, что система отобразит экранную клавиатуру или предпримет некоторые другие действия. Когда первый ответчик уходит в отставку, это может привести к тому, что система скроет экранную клавиатуру или предпримет некоторые другие действия.

Когда приходит событие без касания, оно сначала доставляется в UIWindow. UIWindow доставляет его первому ответчику. Документация, похоже, не указывает, пытается ли UIWindow обрабатывать это событие (и передает его в UIApplication, как обычно, если он сам не обрабатывает) или просто игнорирует событие, если нет первого ответчика.

Для получения более подробной информации см. the documentation.

Смежные вопросы