Откуда берутся методы FirstResponder? - PullRequest
1 голос
/ 22 января 2010

Я смотрю на IKImageDemo, предоставляемый Apple, круговой ползунок вращения связан с методом setRotation: в FirstResponder.Тем не менее, ни один из объектов в проекте, похоже, не имеет такого метода, и все же код работает.

Я пытаюсь скопировать это в свой собственный проект, и MY FirstResponder не имеет setRotation: метод, так что я не уверен, где он живет.Google был бесполезен ...

спасибо.

Ответы [ 3 ]

1 голос
/ 22 января 2010

Ну, первым респондентом в приложении является экземпляр IKImageView. IKImageView отвечает на setRotation: селектор (что можно увидеть, передавая responsedsToSelector: @selector (setRotation :) любому экземпляру IKImageView), хотя я не могу найти, где в документации упоминается setRotation: метод

0 голосов
/ 10 апреля 2013

Я нашел способ разрешить это раздражение.Даже в исходном примере Apple, когда вы удалите привязку для setRotation в первом ответчике, вы не сможете вернуть ее обратно, если не выполните этот трюк: просто используйте инспектор атрибутов для первого ответчика и добавьте пользовательское действие "setRotation:"введите "id".Теперь даже желтый треугольник в привязке First Responder для setRotation: в примере Apple исчезает, и он обнаруживается также в моем собственном экземпляре IKImageView.

0 голосов
/ 22 января 2010

Методы первого респондента не волшебство. Что происходит, когда сообщение отправляется первому респонденту, так это то, что у текущего первого респондента приложения (обычно это сфокусированное представление / элемент управления) спрашивается, реализует ли он метод. Если это так, метод вызывается. Если это не так, то задается следующий респондент вверх по цепочке и так далее, пока не будет достигнут верхний уровень (экземпляр NSApplication). Объект должен фактически реализовать метод для его вызова, он не может просто объявить его.

В этом случае IKImageView реализует -setRotation: как частный метод. Это означает, что метод присутствует (именно поэтому IKImageView принимает сообщение, отправленное первому ответчику), но его использование не задокументировано и не поддерживается. Кажется странным, что Apple отправит пример, используя приватный метод, но все готово. Это определенно тот случай, когда иногда методы случайно исключаются из общедоступных заголовков, когда поддерживается их использование, однако, как правило, целесообразно избегать использования частных методов, если кто-то из Apple специально не сказал вам, что можно использовать один из них.

Вы можете генерировать заголовки для всех методов объекта Objective C, включая частные методы, из двоичного файла, используя class-dump.

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

...