iOS開發~防止navigation多次push一個頁面
阿新 • • 發佈:2019-01-26
在點選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