- 最近網(wǎng)絡(luò)環(huán)境比較差,測試APP的時(shí)候也出現(xiàn)了一些問題,例如:點(diǎn)擊button需要跳轉(zhuǎn)到另一個(gè)頁面,點(diǎn)一次沒反應(yīng),多點(diǎn)了幾次,結(jié)果就連續(xù)push好多這個(gè)頁面。
(BaseNavigationController 繼承自UINavigationController,在所有使用導(dǎo)航欄的地方都使用BaseNavigationController,像修改返回按鈕的樣式,文字只需要在BaseNavigationController中進(jìn)行修改,所有的地方都會被修改) - 最后解決了這個(gè)問題,在這里記錄下,如有。
//在viewDidLoad中添加實(shí)現(xiàn)UINavigationControllerDelegate
-(void)viewDidLoad
{
[super viewDidLoad];
__weak BaseNavigationController *weakSelf = self;
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.delegate = weakSelf;
self.delegate = weakSelf;
}
}
- 實(shí)現(xiàn)協(xié)議方法
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
//這個(gè)方法是在當(dāng)前控制器執(zhí)行push的時(shí)候,禁止手勢右劃返回,避免出現(xiàn)crash的現(xiàn)象,(也可以不實(shí)現(xiàn)好像也沒什么影響)
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.enabled = NO;
}
//判斷上一個(gè)控制器和現(xiàn)在的控制器是不是同一個(gè),如果是,返回。如果不是push到當(dāng)前控制器,這就有效避免了同一個(gè)控制器連續(xù)push的問題
if ([self.topViewController isMemberOfClass:[viewController class]]) {
return;
}
[super pushViewController:viewController animated:animated];
}
- 如果實(shí)現(xiàn)了剛才的協(xié)議方法,禁止右劃返回,就應(yīng)該實(shí)現(xiàn)下面的協(xié)議方法,在控制器已經(jīng)出現(xiàn)的時(shí)候,將右劃返回打開。
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animate
{
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.enabled = YES;
}
}
希望能有幫助,看的懂。