- Реализация по умолчанию
becomeFirstResponder
вызывает canBecomeFirstResponder
. Это связано с тем, что респондент, который возвращает NO из canBecomeFirstResponder
, не должен быть первым респондентом.
becomeFirstResponder
сделает получателя фактически первым ответчиком, если это удастся. canBecomeFirstResponder
просто проверяет, готов ли получатель быть первым респондентом, фактически ничего не меняя. Возможно, что becomeFirstResponder
может потерпеть неудачу, если текущий первый ответчик отказывается уйти в отставку. Могут быть и другие ситуации, в которых becomeFirstResponder
также может потерпеть неудачу.
- В вашем коде не должно быть ничего, что имеет статус первого респондента. Судя по частному методу UIResponder
firstResponder
, в этом случае система не назначает какой-либо конкретной настройки по умолчанию.
По сути, когда кто-то хочет стать первым респондентом, текущий первый респондент (если таковой имеется) просят подать в отставку, а затем новый объект становится первым респондентом. Это может привести к тому, что система отобразит экранную клавиатуру или предпримет какие-либо другие действия. Когда первый респондент уходит в отставку, это может аналогичным образом заставить систему скрыть экранную клавиатуру или предпринять какие-либо другие действия.
Когда приходит событие без прикосновения, оно сначала доставляется в окно UIWindow. Окно UIWindow доставляет его первому респонденту. Кажется, в документации не указано, пытается ли UIWindow обработать само событие (и передает ли оно UIApplication как обычно, если оно само не обрабатывает), или просто игнорирует событие, если нет первого ответчика.
Подробнее см. в документации .