1

嗨伙计们,我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)")
}

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

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

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

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

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

谢谢!

4

1 回答 1

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

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

于 2018-02-02T12:04:32.507 回答