多个UIMenuItem具有相同的选择器

时间:2018-02-02 11:52:43

标签: ios swift swift4 uimenucontroller uimenuitem

Hy家伙,我使用相同的UIMenuItem创建多个selector

["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)")
}

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

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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")
}

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