iOS11 UIBarButtonItem action not get called

前端 未结 6 1274
花落未央
花落未央 2021-01-12 11:06

I used Xcode9 Beta6 to build the project, the action was called correctly on iOS10 device, however it is not work on iOS11 device.

In My project, there are some view

相关标签:
6条回答
  • 2021-01-12 11:17

    In my case I was setting up the button and instantiating it as a property of the vc

    class myVC: UIViewController {
    let closeBarButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(close(_:)))
    }
    

    If I moved this to ViewDidLoad it resolved the problem

    class myVC: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let closeBarButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(close(_:)))
    }
    

    }

    0 讨论(0)
  • 2021-01-12 11:24

    Apple has confirmed this bug. My temporary solution is changing the gesture recognizer area by removing the overlap area, so that the tap gesture won't block the tap event on UIBarButtonItem.

    0 讨论(0)
  • 2021-01-12 11:27

    Mark the method you are targeting at with @objc.

    0 讨论(0)
  • 2021-01-12 11:29

    It is happening only for iOS 11 and when custom UIView used for rightBarButtonItem (or left also). If you are using UIBarButtonItem then it will work fine. There is 0 width of this custom bar item, so we need to set it to something.

    In viewDidLoad of this controller you can add code, you can replace 100 to something what will work for you:

    if let view = self.navigationItem.rightBarButtonItem?.customView {
        view.widthAnchor.constraint(equalToConstant: 100).isActive = true
    }
    

    At least as an easy temporary solution it is fine.

    0 讨论(0)
  • 2021-01-12 11:36

    I solved this problem by removing a current gesture recognizer from my view and adding a new one. Than I opened the connections inspector of my view and add gestureRecognizer connection to my gesture recognizer.

    0 讨论(0)
  • 2021-01-12 11:43

    In my case the problem was a gestureRecognizer added to the whole main view (in order to close the keyboard) like this:

    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeKeyboard)];
    [self.view addGestureRecognizer:gesture];
    

    That gesture recognizer overrides the tap on the UIBarButtonItem, thus I solved by creating a new subview placed immediately below the navigation bar and assigning the gesture recognizer to that view and not to the whole main view.

    0 讨论(0)
提交回复
热议问题