iOS Developer

完善UINavigationController

2016-12-03  本文已影响83人  双湾

导航控制器是App中常用的一种控制器,但是系统提供的UINavigationController并不完善,下面举两个例子以及对应的改善方案。

解决方案:自定义UINavigationController的子类,或者使用root view controller作为代理,实现UINavigationControllerDelegategestureRecognizerShouldBegin()方法,当子控制器数量大于1时,返回true

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    if viewControllers.count > 1 {
      return true
    }
    return false
}

解决方案:如果App有controller正在push或者pop,禁止启动第二次push和pop操作,或者加入队列中,等前一次动画结束再启动下一个操作,同时禁用手势操作interactivePopGestureRecognizer.isEnable = false,等回调控制器已经显示的代理方法后还原设置。

func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
       isAnimated = false
       interactivePopGestureRecognizer?.isEnabled = true
       // pop queue view controllers
       dequeueViewController(navigationController)
   }

完整代码:NavigationController.m

上一篇 下一篇

猜你喜欢

热点阅读