Как работает forwardingTargetForSelector:?
У меня есть UIBarButtonItem
, Когда он получает сообщение, которое он не может обработать, я хочу, чтобы он отправил это сообщение определенному контроллеру представления.
Я думал, что смогу сделать это с помощью элемента панели кнопок forwardingTargetForSelector:
метод, но, видимо, такое свойство не найдено на объектах типа UIBarButtonItem
, (Пункт терминологии: означает ли это forwardingTargetForSelector:
такое частная собственность? edit: Подождите, я думаю, что я в замешательстве... методы с двоеточием в конце не являются свойствами... так что вы можете когда-нибудь сделать метод (например, getter/setter), какие параметры передаются?)
И значит ли это, что для того, чтобы установить значение forwardingTargetForSelector:
Я должен сделать это из файла.m объекта, для которого я хочу установить его? Что означало бы, что я должен был бы создать подкласс моего UIBarButtonItem?
И если да, то почему это не является публичной собственностью NSObjects?
И, кроме того, каков наилучший способ достижения моей цели перенаправления, предпочтительно избегая подклассов?
Дополнительная информация:
Все это проистекает из моей склонности использовать одно действие в ответ на различные нажатия одной и той же кнопки. Действие в настоящее время содержится в моем делегате (см. Как мне реализовать [почти] идентичные действия, используемые в различных VC? (Ответ: использовать категорию)) и отличается только тем, что оно должно отправлять сообщение presentViewController контроллеру представления, который создал экземпляр кнопка, которая отправила действие. Таким образом, в действии я могу отправить сообщение presentViewController sender
, который является экземпляром кнопки, и я хочу иметь возможность пересылать это сообщение контроллеру представления, который создал этот экземпляр кнопки, что я могу сделать, если я установлю свойство перенаправления каждой кнопки сразу после того, как оно будет создано в его соответствующем просмотр контроллера.
Я надеялся избежать "почему", просто чтобы сделать вопрос короче, но я пойду.
1 ответ
forwardingTargetForSelector:
на самом деле не собственность; это больше похоже на вопрос, который среда выполнения задает экземпляру, когда экземпляр не отвечает на сообщение.
Это не может быть собственность в @property
смысл объявленного свойства, потому что каждый селектор может иметь различную цель; за этим должно быть отображение. Это просто не так, как работают объявленные свойства.
UIBarButtonItem
спускается с NSObject
и он наследует этот метод вместе со всеми остальными, но вы не можете "установить" цель переадресации для селектора извне экземпляра (без создания какого-либо другого механизма, позволяющего вам это делать, в любом случае - возможно, но не доступно по умолчанию).
Чтобы использовать этот метод, да, вы должны реализовать его в классе, который выполняет пересылку. Это действительно означает создание подклассов. Это также означает, что экземпляр перенаправления должен иметь ссылку на объект, на который он пересылает; это требует тщательного проектирования.
forwardingTargetForSelector:
это все, но, конечно, не правильный путь к достижению цели. В общем, на самом деле, это немного эзотерично.
Я не уверен, какую именно проблему вы пытаетесь решить ("создание кнопки пересылки сообщений, на которые она не отвечает", все еще носит довольно общий характер - в частности, почему это необходимо?), Поэтому трудно быть более точный.