Подтвердить что ты не робот

Что такое формальное определение первого ответчика в iOS?

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

Но более формально, какова область действия первого ответчика? Например, это ответчик на уровне приложений? Похоже, что первый ответчик просто говорит, что этот конкретный объект получит уведомление о взаимодействии. Может ли другой ответчик украсть статус первого ответчика?

Просьба пояснить или направить мне какую-либо соответствующую информацию. Я прочитал общее объяснение Apple, что такое ответчик. Я ищу объяснение, которое немного больше построено.

4b9b3361

Ответ 1

Объем первого ответчика в iOS определяется иерархией представления. Помните, что ответчик является частью иерархии респондентов и определен документацией Apple:

Ответчик - это объект, который может реагировать на события и обрабатывать их. Все объекты-респонденты - это экземпляры классов, которые в конечном счете наследуются от UIResponder (iOS) или NSResponder (OS X).

Практически говоря, все респонденты являются частью цепочки потенциальных респондентов, ведущих весь путь до самого Приложения. Это означает, что область действия ответчика определяется тем, насколько далеко вы должны пройти цепочку, чтобы получить объект, способный обрабатывать ответ. Если первый ответчик является элементом пользовательского интерфейса, таким как UITextField, ваша область привязана к сфере действия этого ответчика.

На этом изображении слева показана иерархия первого ответа iOS (OS X справа):

First Responder Hierarchy

Чтобы ответить на вторую часть вопроса, да, объекты могут "украсть" статус первого ответчика, если пользователь взаимодействует с элементом, например:

  • Пользователь нажимает на textField1. Это первый ответчик.
  • Пользователь нажимает на textField2. Он получил статус первого ответчика из textField1.

... и вы можете присвоить им статус первого ответчика с определенными функциями:

[textField3 becomeFirstResponder]; //This is now the first responder
[textField4 becomeFirstResponder]; //Now textField2 has 'stolen' first responder status
[textField4 resignFirstResponder]; //The text field has resigned its first responder status to the next level up

Для всех, кто читает это, кто не попал в документацию Apple по этому поводу, хорошим стартовым местом является объяснение иерархии ответчика, найденное здесь: https://developer.apple.com/library/ios/documentation/General/Conceptual/Devpedia-CocoaApp/Responder.html

Надеюсь, это поможет!

Ответ 2

Это свойство окна. Окно всегда имеет не более одного первого ответчика. Любой UIResponder может заявить статус первого ответчика, отправив becomeFirstResponder, и именно поэтому вы можете заставить UITextField получить "фокус", отправив ему это сообщение.