UIMenuController и цепочка респондента: что происходит? - PullRequest
0 голосов
/ 04 октября 2011

Я использую UIMenuController в пользовательском подклассе UIView.Это означает, что он может стать первым респондентом и заявляет о своем canPerformAction в действии «удалить».

Мне также хотелось бы, чтобы супервизор этого представления (также пользовательский UIView) мог использовать контроллер меню,на этом суперпредставлении я отметил его как способного быть первым респондентом и реализовал canPerformAction для различных действий (в данном случае «копировать» и «вырезать»).

Вот в чем дело - когда ясделать меню видимым из (первого) подпредставления, оно помещает все три действия в меню: удаление, копирование и вырезание.В отладчике я вижу, как canBecomeFirstResponder и canPerformAction вызываются в обоих представлениях до появления меню.

Что здесь происходит?Почему контроллер меню не ограничен видом, который стал первым респондентом?Или я не правильно диагностирую это?

Спасибо.

1 Ответ

1 голос
/ 04 октября 2011

Какой код вы используете?

В документации для canPerformAction: withSender: ,

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

Это кажется противоречивым, говоря, что реализация по умолчанию рекурсирует цепочку респондента, но также и то, что UIMenuController рекурсирует цепочку респондента, если вы возвращаете NO.

Самый простой способ, вероятно, переопределить -nextResponder для возврата nil, но это может иметь другие побочные эффекты (например, действия с целью "nil" поднимаются по цепочке респондента по умолчанию!).

...