"Первый ответчик". Правильно ли я понял?
Позвольте мне кратко рассказать об этом: "Первый ответчик" в файле nib - это объект, представляющий элемент управления пользовательского интерфейса, который имеет пользовательский фокус. Поэтому, если пользователь нажимает на элемент управления, наборы головок выбирают элемент управления пользовательским интерфейсом в качестве первого ответчика. В моем приложении я мог бы сделать выход к этому "Первому ответчику" из наконечника, чтобы я мог, например, отправить сообщение "сделать красный цвет шрифта" на то, что пользователь активировал нажатием.
И тогда, если этот элемент управления первого ответчика не понимает это сообщение, сообщение передается в цепочке ответчиков до тех пор, пока элемент управления родительского элемента или бабушки и дедушки (и т.д.) не поймет это сообщение. В противном случае он будет проигнорирован.
Итак, первый ответчик всегда устанавливает "ссылку" на элемент управления пользовательского интерфейса, который имеет фокус. Правильно ли это?
Ответы
Ответ 1
Правильное общее изображение, неправильные детали реализации в первом абзаце.
"Первый ответчик" в NibFile - это объект...
Нет, на самом деле, первый ответчик nil
. Подключение элемента управления пользовательского интерфейса (например, кнопки) к первому ответчику в наконечнике эквивалентно [control setTarget:nil]
в коде.
Причиной для фальшивого объекта First Responder в окне nib является то, что в IB вы одновременно устанавливаете цель и действие (ctrl-drag to target, выберите действие из всплывающего меню). Вы не можете установить действие и оставить цель отключенной, как вы можете в коде, поэтому, чтобы установить ее на nil
, вам нужно сделать это явно. Для этого нужен первый ответчик: это поддельный объект, представляющий nil
, поэтому вы можете установить цель и действие так же, как и при настройке на конкретную реальную цель.
Конечно, вы не можете использовать это, чтобы установить что-нибудь еще в nil
, только для целей просмотра. Вы можете использовать его только для обозначения первого ответчика, а не что-то еще.
Итак, если пользователь klicks в элементе управления UI, набор Nib...
Нип ничего не делает. Это просто лиофилизированная коллекция объектов, хранящихся на диске. Даже когда вы создаете NSNib, все, что вы делаете, - это размораживание некоторых объектов. Это объекты, которые делают вещи.
В данном случае, когда вы отключаете элемент управления, который вы подключили к первому ответчику из nib, его цель установлена на nil
(помните, что на самом деле первый ответчик: цель nil
). Когда целью управления является nil
, и пользователь нажимает на него, он отправляет свое действие в зависимости от того, какой ответчик является первым ответчиком в то время.
Ваш второй и третий параграфы верны.
Ответ 2
Ваше понимание неполное. цепочка ответчиков включает в себя больше, чем мы обычно думаем как "элементы управления пользовательского интерфейса", включая, самое главное, текущий документ. Одним из больших преимуществ является то, что он позволяет вам взаимодействовать с концептуально "текущим" - текущим окном, текущим текстовым полем, текущим документом и т.д. - без большого количества беспорядков, чтобы найти его.
Ответ 3
Отметьте эту ссылку, она хорошо объясняет. Я думаю, что у вас есть смысл:
http://cocoadev.com/FirstResponder
Из источника:
FirstResponder - первый объект в цепочке ответчиков, которая дается возможность ответить на событие.
Ответ 4
Ответчик - это любой объект, который будет выполнять действия (функции вызова), когда происходят события (например, нажатие на кнопки). Цепочка ответчика представляет собой последовательность объектов, каждая из которых содержится друг в друге - например, кнопка внутри панели внутри окна. Когда происходит событие, мы перебираем цепочку, пока не найдем объект, у которого нет ответчика, установленного на nil
и который поэтому может ответить на событие. Поэтому вместо предоставления объекта-ответчика для каждой кнопки в окне мы можем предоставить один ответчик для всего окна. Первый ответчик - это просто первый объект внутри цепочки ответчиков - привязка события к первому ответчику позволяет событию передать цепочку.