代码之家  ›  专栏  ›  技术社区  ›  Ben Gottlieb

确定UIMenuController何时被解除?

  •  15
  • Ben Gottlieb  · 技术社区  · 14 年前

    有没有办法确定UIMenuController何时被解雇?我有一个(不可编辑的)文本区域,当菜单打开时我会高亮显示,当他们选择一个项目(简单)或取消(不可能?)时,我想取消高亮显示

    3 回复  |  直到 14 年前
        1
  •  40
  •   Markus Müller-Simhofer    14 年前

    状态更改时,UIMenuController将通知发布到默认的NSNotification center。您可以订阅它们,以便在系统隐藏菜单时获得通知:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willHideEditMenu:) name:UIMenuControllerWillHideMenuNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didHideEditMenu:) name:UIMenuControllerDidHideMenuNotification object:nil];
    
        2
  •  10
  •   William Denniss    10 年前

    基于@Markus Mller的建议,您可以复制以下模式:

    - (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];
    }
    

    在我的例子中,我有数百个可选择的对象,所以我不想要它们 全部的 全部的 resignFirstResponder 当菜单被取消,并以相同的方式结束观察时。

    在我的情况下(如在OP的),因为该项目是不可编辑的,它是可取的,我呼吁 辞职第一响应者 当菜单取消时。这种方式, 辞职第一响应者

        3
  •  2
  •   eduardo    6 年前

    NotificationCenter.default.addObserver(
       self,
       selector: #selector(self.didHideEditMenu),
       name: NSNotification.Name.UIMenuControllerDidHideMenu,
       object: nil)
    
    NotificationCenter.default.addObserver(
       self,
       selector: #selector(self.willHideEditMenu),
       name: NSNotification.Name.UIMenuControllerWillHideMenu,
       object: nil)
    
        4
  •  0
  •   Viniciusml    4 年前

    Swift 5号

    NotificationCenter.default.addObserver(
            self,
            selector: #selector(willHideMenu),
            name: UIMenuController.willHideMenuNotification,
            object: nil)