ios 具有相同选择器的多个UIMenuItem

dzhpxtsq  于 2023-03-24  发布在  iOS
关注(0)|答案(2)|浏览(151)

大家好,我用相同的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)")
}

但我收到的发送方对象不是以下类型:UIMenuItem,所以如果我用途:

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

要知道点击了哪个按钮,如果我用途:

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

我看到了正确的项目数,我如何才能访问点击的一个,而不使用一个选择器的每一个?
谢谢!

icnyk63a

icnyk63a1#

不幸的是,没有任何选项(委托,函数/方法或变量/属性)提供有关所选菜单项的信息。
我确实遇到了同样的问题,但找不到任何东西。最后我实现了一个手动练习,就像这样:

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

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

bbmckpt7

bbmckpt72#

你可以用UIAction的实现UIMenu。UIAction支持一个处理程序,它们区分标识符或名称。下面是一个例子:

let menuAction = { (action: UIAction) in

    let identifier = action.identifier.rawValue
    let title = action.title

    // do something with identifier / title here
}

var actions: [UIAction] = [
    UIAction(
        title: "Please select",
        identifier: UIAction.Identifier("myStringValue"),
        handler: menuAction
    )
]

mybutton.menu = UIMenu(children: actions)
mybutton.showsMenuAsPrimaryAction = true
mybutton.changesSelectionAsPrimaryAction = true

相关问题