1

因此,我已经能够使用 tapGesture 识别器成功覆盖菜单按钮的默认行为。我有这样的东西

func addMenuButtonLock() {
    defaultMenuTapRecognizer = UITapGestureRecognizer(target: self, action: Selector())
    defaultMenuTapRecognizer!.allowedPressTypes = [NSNumber(integer: UIPressType.Menu.rawValue)]
    self.view.addGestureRecognizer(defaultMenuTapRecognizer!)
}

func removeMenuButtonLock() {
    if defaultMenuTapRecognizer != nil {
        self.view.removeGestureRecognizer(defaultMenuTapRecognizer!)
        defaultMenuTapRecognizer = nil
    }
}

override func viewWillAppear(animated: Bool) {
    addMenuButtonLock()
    super.viewWillAppear(animated)
}

override func viewDidAppear(animated: Bool) {
    removeMenuButtonLock()
    super.viewDidAppear(animated)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    addMenuLock()
}

override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated)
    removeMenuLock()
}

但似乎在转换和转场期间(如在一个视图控制器被另一个视图控制器替换/覆盖之间的动画中),如果按下菜单按钮,它似乎会退回到将视图控制器从堆栈中弹出的默认设置。我觉得我已经尝试了一切,包括:

  • 根本不删除tapgesturerecognizer
  • 在调用视图外观函数的超级方法之前调用它们
  • 将 Tapgesturerecognizer 添加到底层导航控制器(继承它)
  • 覆盖 pressesBegan、pressesCancelled 和 pressesEnded。在这种情况下,它会捕获菜单按下,但尽管我从未调用过他们的超级方法,但视图仍然会弹出。我真的迷路了。
4

0 回答 0