由于在应用程序的其他地方使用 UIMenuController,UISearchBar 显示错误的 UIMenuItems
Posted
技术标签:
【中文标题】由于在应用程序的其他地方使用 UIMenuController,UISearchBar 显示错误的 UIMenuItems【英文标题】:UISearchBar shows wrong UIMenuItems due to use of UIMenuController elsewhere in app 【发布时间】:2014-05-22 15:43:01 【问题描述】:我有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
被询问在MyModalViewController
内显示哪个UIMenuItems
,当用户在其中长按并因此显示不相关的菜单项,而不是通常的文本字段的[剪切|复制|粘贴|全选]选项。
我的理解是,这是因为MyRootViewController
仍在响应者链中,即使它当前不可见。
到目前为止,我想出的最佳解决方案是继承 UISearchBar
并覆盖 - (BOOL)canPerformAction:(SEL)action withSender:(id)sender
,返回 YES
进行剪切、复制、粘贴或全选。这阻止了 ios 进一步寻找响应者链。但这感觉像是一种 hack - 我不应该仅仅因为我在其他地方使用 UIMenuController
而使 UISearchBar
与系统的其余部分的行为一致而诉诸于此。
有谁知道这个问题在技术上更正确的解决方案?
【问题讨论】:
【参考方案1】:您可以选择仅在长按时设置[UIMenuController sharedController]
的menuItems
属性。并在抛出 UIMenuControllerWillHideNotification
时将其设置为 nil。
【讨论】:
以上是关于由于在应用程序的其他地方使用 UIMenuController,UISearchBar 显示错误的 UIMenuItems的主要内容,如果未能解决你的问题,请参考以下文章