在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界面重复打开问题了。