Понимание системной логики для первого респондента

Меня смущает несколько пунктов службы экстренного реагирования:

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

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


person user500    schedule 07.09.2011    source источник


Ответы (1)


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

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

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

См. в документации.

person Anomie    schedule 07.09.2011