У меня есть MyRootViewController
, который представляет MyModalViewController
модально при нажатии кнопки. MyModalViewController
содержит UISearchBar
, и я хочу, чтобы он отображал обычные текстовые параметры [Вырезать|Копировать|Вставить|Выбрать все] при длительном нажатии в текстовом поле.
MyRootViewController
представляет пользовательский UIMenuItems
(через UIMenuController
) при длительном нажатии, поэтому переопределяет - (BOOL)canBecomeFirstResponder
и - (BOOL)canPerformAction:(SEL)action withSender:(id)sender
и реализует -(void)duplicate:(id)sender
и -(void)delete:(id)sender
.
Моя проблема заключается в том, что MyRootViewController
спрашивают, какой UIMenuItems
отображать для UISearchBar
внутри MyModalViewController
, когда пользователь долго нажимает внутри него и, следовательно, отображает ненужные элементы меню вместо обычных параметров [Вырезать | Копировать | Вставить | Выбрать все]. для текстового поля.
Насколько я понимаю, это происходит потому, что MyRootViewController
все еще находится в цепочке респондентов, хотя в настоящее время он не виден.
Лучшее решение, которое я придумал до сих пор, — создать подкласс UISearchBar
и переопределить - (BOOL)canPerformAction:(SEL)action withSender:(id)sender
, возвращая YES
для вырезания, копирования, вставки или выбора всего. Это останавливает iOS, идущую дальше по цепочке респондентов. Но это похоже на взлом — я не должен прибегать к этому только для того, чтобы заставить UISearchBar
вести себя согласованно с остальной системой, только потому, что я использую UIMenuController
в другом месте.
Кто-нибудь знает более технически правильное решение этой проблемы?