【问题标题】:Multiple UIMenuItem with the same selector具有相同选择器的多个 UIMenuItem
【发布时间】:2018-07-12 22:07:41
【问题描述】:

大家好,我用相同的selector 创建了多个UIMenuItem

["first", "second", "third"].forEach({ (menu) in
    let b = UIMenuItem(title: menu, action: #selector(target.tap(sender:)))
})

@objc public func click(sender: UIMenuItem){
    print("click: \(sender)")
}

但是我收到的 sender 对象不是类型:UIMenuItem,所以如果我使用:

@objc public func click(sender: UIMenuItem){
    print("click: \(sender.title)")
}

要知道点击了哪个按钮,我会得到错误,如果我使用:

@objc public func click(sender: UIMenuController){
    print("click: \(sender.menuItems)")
}

我看到了正确数量的项目,如何在不为每个项目使用一个选择器的情况下访问被点击的项目?

谢谢!

【问题讨论】:

    标签: ios swift swift4 uimenucontroller uimenuitem


    【解决方案1】:

    很遗憾,没有任何选项(委托、函数/方法或变量/属性)提供有关所选菜单项的信息。

    我确实遇到了同样的问题,但找不到任何东西。最后我实现了一个手动练习,如下所示:

    var menuItems =  [UIMenuItem]()
    
    menuItems.append(UIMenuItem(title: "First", action: #selector(self.firstMenuClick(_:))))
    
    menuItems.append(UIMenuItem(title: "Second", action: #selector(self.secondMenuClick(_:))))
    
    menuItems.append(UIMenuItem(title: "Third", action: #selector(self.thirdMenuClick(_:))))
    
    UIMenuController.shared.menuItems = menuItems
    
    
    @objc public func firstMenuClick(sender: UIMenuController){
        print("firstMenuClick")
    }
    
    @objc public func secondMenuClick(sender: UIMenuController){
        print("secondMenuClick")
    }
    
    
    @objc public func thirdMenuClick(sender: UIMenuController){
        print("thirdMenuClick")
    }
    

    我也在寻找比以前更好的答案,但如果找不到更好的方法,你可以试试这个来解决你的问题。

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多