有没有办法确定何时取消UIMenuController?我有一个(不可编辑的)文本区域,我在菜单显示时突出显示,当他们选择一个项目(简单)或取消(不可能?)时,我想取消突出显示它。
答案 0 :(得分:38)
在状态更改时,UIMenuController会将通知发布到默认的NSNotification中心。您可以订阅它们以在系统隐藏菜单时收到通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willHideEditMenu:) name:UIMenuControllerWillHideMenuNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didHideEditMenu:) name:UIMenuControllerDidHideMenuNotification object:nil];
答案 1 :(得分:10)
基于@MarkusMüller的建议,这里有一个你可以复制的模式:
- (BOOL)becomeFirstResponder
{
// starts listening for UIMenuControllerDidHideMenuNotification & triggers resignFirstResponder if received
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resignFirstResponder) name:UIMenuControllerDidHideMenuNotification object:nil];
return [super becomeFirstResponder];
}
- (BOOL)resignFirstResponder
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIMenuControllerDidHideMenuNotification object:nil];
// your custom cleanup code here (e.g. deselection)
return [super resignFirstResponder];
}
在我的情况下,我有数百个可选对象,所以我不希望他们所有观察此通知所有时间!这个模式在获得firstResponder时会开始观察,当菜单被解除时触发resignFirstResponder
,并结束观察。
在我的情况下(如在OP中),由于该项目是不可编辑的,因此我希望在菜单被解除时拨打resignFirstResponder
。这样,如果他们是否选择了其中一个菜单选项,则会调用resignFirstResponder
,因此清理代码将始终触发。
答案 2 :(得分:1)
Swift 3& 4 强>
k8s-ig--foobar
答案 3 :(得分:0)
快捷键5
NotificationCenter.default.addObserver(
self,
selector: #selector(willHideMenu),
name: UIMenuController.willHideMenuNotification,
object: nil)