Пользовательский UIMenuController не отображает Swift 4 - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь создать пользовательский UIMenuController с несколькими UIMenuItems.Я реализую это в подклассе UITableViewCell.Я пытаюсь создать пользовательский UIMenuController с кодом ниже.Когда я нажимаю и удерживаю ячейку таблицы, появляется только пункт меню «Копировать».Однако Menu1 не будет отображаться.Чего мне не хватает?

override func awakeFromNib() {
    super.awakeFromNib()
    self.tableView.delegate = self
    self.tableView.dataSource = self
    tableView.reloadData()

    let myMenuController: UIMenuController = UIMenuController.shared

    // make menu visible on MenuController
    myMenuController.isMenuVisible = true

    // set the arrow down.
    myMenuController.arrowDirection = UIMenuControllerArrowDirection.down

    // set rect、view
    myMenuController.setTargetRect(CGRect.zero, in: self.tableView)

    // make MenuItems
    let myMenuItem_1: UIMenuItem = UIMenuItem(title: "Menu1", action: #selector(onMenu1(sender:)))
    let myMenuItem_2: UIMenuItem = UIMenuItem(title: "Menu2", action: #selector(onMenu2(sender:)))
    let myMenuItem_3: UIMenuItem = UIMenuItem(title: "Menu3", action: #selector(onMenu3(sender:)))

    // make an array to store MenuItems
    let myMenuItems: NSArray = [myMenuItem_1, myMenuItem_2, myMenuItem_3]

    // add MenuItems to MenuController
    myMenuController.menuItems = myMenuItems as? [UIMenuItem]
    // Initialization code
}

@objc func onMenu1(sender: UIMenuItem) {
    print("onMenu1")
}
@objc func onMenu2(sender: UIMenuItem) {
    print("onMenu2")
}
@objc func onMenu3(sender: UIMenuItem) {
    print("onMenu3")
}

func tableView(_ tableView: UITableView, shouldShowMenuForRowAt indexPath: IndexPath) -> Bool {
    return true
}
func tableView(_ tableView: UITableView, canPerformAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) -> Bool {
    print(action)
    print(#selector(onMenu1(sender:)))
    return action == #selector(onMenu1(sender:)) || action == #selector(copy(_:))
}
override func becomeFirstResponder() -> Bool {
    return true
}
override var canBecomeFirstResponder: Bool {
    return true
}
...