1. 程式人生 > >iOS開發~防止navigation多次push一個頁面

iOS開發~防止navigation多次push一個頁面

在點選push下一個頁面時,因為各種原因,點一下cell或按鈕沒有響應,使用者可能就多點幾下,這時候會開啟好幾個一樣的頁面。

這是因為push後的頁面有耗時操作或者剛好push到另一個頁面時,另一個頁面正好在reloadData卡住主執行緒。造成點選cell時卡住了。

這時,我們可以通過重寫導航控制器的方法來解決這個問題。

#import <UIKit/UIKit.h>

@interface NaviViewController : UINavigationController

@end
#import "NaviViewController.h"

@interface NaviViewController ()<UINavigationControllerDelegate>
// 記錄push標誌
@property (nonatomic, getter=isPushing) BOOL pushing;
@end

@implementation NaviViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.delegate = self;
}


- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if (self.pushing == YES) {
        NSLog(@"被攔截");
        return;
    } else {
        NSLog(@"push");
        self.pushing = YES;
    }
    
    [super pushViewController:viewController animated:animated];
}


#pragma mark - UINavigationControllerDelegate
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    self.pushing = NO;
}
@end