我有MyRootViewController
按下按钮时以模态方式显示MyModalViewController
。 MyModalViewController
包含UISearchBar
,我想要在长文本的文本字段中显示常用的[剪切|复制|粘贴|全选]文本选项。
MyRootViewController
在长时间内显示自定义UIMenuItems
(通过UIMenuController
),因此会覆盖- (BOOL)canBecomeFirstResponder
和- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
并实施-(void)duplicate:(id)sender
和{ {1}}。
我遇到的问题是-(void)delete:(id)sender
被问到MyRootViewController
哪个UIMenuItems
显示UISearchBar
内MyModalViewController
,当用户长按其中并因此显示不相关的菜单项,而不是文本字段的常用[剪切|复制|粘贴|全选]选项。
我的理解是发生了这种情况,因为MyRootViewController
仍然在响应者链中,即使它当前不可见。
我到目前为止提出的最佳解决方案是继承UISearchBar
并覆盖- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
,返回YES
进行剪切,复制,粘贴或全选。这会阻止iOS继续向下看响应者链。但这感觉就像是一个黑客 - 我不应该只是为了使UISearchBar
与系统的其他部分保持一致,只是因为我在其他地方使用UIMenuController
。
有没有人知道这个问题在技术上更正确的解决方案?
答案 0 :(得分:0)
您可以选择仅在长按时设置menuItems
[UIMenuController sharedController]
属性。 1}}抛出时将其设置为nil。