How can you add a UIGestureRecognizer to a UIBarButtonItem as in the common undo/redo UIPopoverController scheme on iPad apps?

后端 未结 15 1566
被撕碎了的回忆
被撕碎了的回忆 2020-12-07 12:36

Problem

In my iPad app, I cannot attach a popover to a button bar item only after press-and-hold events. But this seems to be standard for

15条回答
  •  轮回少年
    2020-12-07 12:52

    I know it is not the best solution, but I am going to post a rather easy solution that worked for me.

    I have created a simple extension for UIBarButtonItem:

    fileprivate extension UIBarButtonItem {
        var view: UIView? {
            return value(forKey: "view") as? UIView
        }
        func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {
            view?.addGestureRecognizer(gestureRecognizer)
        }
    }
    

    After this, you can simply add your gesture recognizers to the items in your ViewController's viewDidLoad method:

    @IBOutlet weak var myBarButtonItem: UIBarButtonItem!
    
    func setupLongPressObservation() {
        let recognizer = UILongPressGestureRecognizer(
            target: self, action: #selector(self.didLongPressMyBarButtonItem(recognizer:)))
        myBarButtonItem.addGestureRecognizer(recognizer)
    }
    

提交回复
热议问题