Номенклатура может сбивать с толку. Вместо «первого респондента» воспринимайте его как «начальную цель события», то есть объект, который является первым респондентом, становится начальной целью для всех событий. В некоторых API это также называется «фокусом», хотя в API Apple это обычно зарезервировано для описания окон.
В любой момент времени в приложении имеется только одна цель первого респондента / первичного события. Только отдельные объекты / экземпляры могут стать целью первого респондента / первоначального события. Классы могут просто определить, могут ли их экземпляры стать первыми-респондентами / первичными-целевыми событиями. Класс должен предоставлять возможность стать целью первого респондента / первоначального события приложения, если в этом есть смысл. Например, текстовое поле, очевидно, нуждается в способности перехватывать события, чтобы оно могло использовать это событие для своего редактирования. Напротив, статическая метка не нуждается в такой возможности.
То, будет ли определенный класс наследовать от NSResonder, не имеет никакого отношения к тому, позволит ли класс (или конкретный экземпляр класса) самому себе быть установлен в качестве первого-ответчика / первоначального события-цели. Эта способность исходит исключительно из ответа экземпляров на сообщение canBecomeFirstResponder
. Один и тот же экземпляр может отказаться быть первым-респондентом / первичным-целевым событием при одном наборе условий, а затем разрешить его позднее, когда условия изменятся. Классы могут, конечно, получить статус, если захотят.
Другими словами, первый-респондент / начальное-событие-цель - это состояние определенного экземпляра в определенное время. Первый-респондент / intial-event-target похож на «горячий картофель» или токен, который передается от экземпляра к экземпляру в пользовательском интерфейсе. Некоторые классы вообще отказываются брать горячий картофель. Некоторые всегда так делают, а другие хватают это иногда и игнорируют.