在ios开发中使用pushViewController方法打开UIViewController界面的时候,我们由于点击跳转按钮速度比较快,可能会出现UIViewController界面重复打开问题,那么我们该如何解决ios UIViewController界面重复跳转问题呢?
首先我们要了解的是pushViewController方法是UINavigationController类里面的方法,要想防止界面的重复跳转,需要新建一个UINavigationController类的category分类,如图所示:
然后在UINavigationController+NoRepeat.h文件中定义一个UINavigationController类的扩展方法,代码如下:
#import <UIKit/UIKit.h> @interface UINavigationController (NoRepeat) //是否允许重复的方法定义 -(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated noRepeatOpen:(BOOL)flag; @end
在UINavigationController+NoRepeat.m中实现上面定义的方法,用于跳转到指定界面,代码如下:
#import "UINavigationController+NoRepeat.h" @implementation UINavigationController (NoRepeat) - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated noRepeatOpen:(BOOL)flag { //判断该类是否已经打开, if ([[self.viewControllers lastObject] isKindOfClass:viewController.class] && flag) { return; } //隐藏下方tab,可忽略 if (self.viewControllers.count) { viewController.hidesBottomBarWhenPushed = YES; } //跳转 [self pushViewController:viewController animated:animated]; } @end
那么该如何使用我们的UINavigationController扩展类呢?只需要在对应的界面引入“#import "UINavigationController+NoRepeat.h"”头文件,然后使用如下方法即可:
//“orderQueryVC”是目标controller界面,"YES"表示不允许重复打开 [self.navigationController pushViewController:orderQueryVC animated:YES noRepeatOpen:YES];
按照上方代码,你就可以轻松解决UIViewController界面重复打开问题了。