当用户在我的UINavigationController
到达特定的UIViewController
时按下返回按钮,我想执行一个操作。
不幸的是,似乎UINavigationControllerDelegate
没有任何方法可以通知弹出视图。
作为解决方法,我现在在viewDidDisappear
方法中执行我的操作,只有在animated
为YES
时才会触发。 这个方法可行,但有点丑陋。
应该如何正确实现这一功能?
当用户在我的UINavigationController
到达特定的UIViewController
时按下返回按钮,我想执行一个操作。
不幸的是,似乎UINavigationControllerDelegate
没有任何方法可以通知弹出视图。
作为解决方法,我现在在viewDidDisappear
方法中执行我的操作,只有在animated
为YES
时才会触发。 这个方法可行,但有点丑陋。
应该如何正确实现这一功能?
处理来自导航视图控制器(以及模态窗口)的弹出最流行的方法是为您的视图控制器实现viewWillDisappear
。
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (self.isMovingFromParentViewController || self.isBeingDismissed) {
// This view controller is being popped or dismissed
}
}
navigationController:willShowViewController:animated:
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
if([navigationController.viewControllers containsObject:self])
{
NSLog(@"push");
}
else
{
NSLog(@"pop");
}
}
首先,您需要将UINavigationControllerDelegate适配到导航控制器并实现此方法
public func navigationController(
_ navigationController: UINavigationController,
didShow viewController: UIViewController,
animated: Bool) {
guard let dismissedViewController =
navigationController.transitionCoordinator?
.viewController(forKey: .from),
!navigationController.viewControllers
.contains(dismissedViewController) else {
return
}
performOnDismissed(for: dismissedViewController)
}
if (dismissedViewController is DesireViewController)
然后,调用你的方法。
你可以在 viewWillDisappear 时调用代理方法,或者在某些 UIViewController 的 viewWillAppear 上设置逻辑。