相信在做項目的時候彩届,各位同學都有碰到伪冰,這樣一個問題,頁面二級跳轉(zhuǎn)或三級跳轉(zhuǎn)樟蠕,一鍵返回到一級頁面的需求
今天有個小伙伴問我贮聂,他的需求是,在提交一個表單的頁面寨辩,提交成功后吓懈,要展示一個提交表單成功的頁面,當用戶此時點擊返回按鈕事靡狞,頁面就要略過表單頁面耻警,放回到上一級頁面。
也就是A 跳轉(zhuǎn)到 B(表單頁面) 甸怕,表單提交成功跳轉(zhuǎn)到 C(提交成功頁面)甘穿,在C頁面點擊返回按鈕,直接返回到A頁面梢杭。
下面來介紹第一種方法
============
我的第一想法是這樣的扒磁,點C的時候直接返回A,那就在C頁面定義個Block,當點擊返回,調(diào)用Block事件式曲,在BLock里面寫返回事件妨托,
C.h
#import "BaseViewController.h"
// 定義Block
typedef void(^BackBlock)(void);
/**
* 創(chuàng)建團隊
*/
@interface CreatTeam : BaseViewController
// 創(chuàng)建一個Block的實例
@property (nonatomic, copy) BackBlock backBlock;
@end
C.m
// 返回事件
- (void)back {
[self.navigationController popViewControllerAnimated:NO];
// 防止循環(huán)引用
__weak typeof(self) weakSelf = self;
weakSelf.backBlock();
[SVProgressHUD dismiss];
}
然后在B控制器的
B.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
switch (indexPath.section) {
case 0:
{
CreatTeam *creatVC = [[CreatTeam alloc] init];
creatVC.team = _teams[indexPath.row];
creatVC.backBlock = ^(){
[self.navigationController popViewControllerAnimated:NO];
};
[self.navigationController pushViewController:creatFromCompanyVC animated:YES];
}
}
這種方法缸榛,使用起來顯得有點繁瑣,并且一定要將動畫關(guān)掉兰伤,否則會穿幫内颗。不過這也算是一條思路。
下面來介紹第二種方法
第二種方法的思路是這樣的敦腔,是可以獲取到所有的控制器的數(shù)組均澳,當頁面跳轉(zhuǎn)到C頁面的時候,就將B頁面從數(shù)據(jù)中移除掉符衔,這樣點擊返回按鈕的時候找前,頁面直接就跳轉(zhuǎn)到了A頁面。
上代碼:
在C.m
- (void)back {
// 獲取所有的控制器數(shù)組
NSMutableArray *vcArr = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
// 將上級頁面從數(shù)組中移除
[vcArr removeObjectAtIndex:vcArr.count-2];
self.navigationController.viewControllers = vcArr;
[self.navigationController popViewControllerAnimated:NO];
[SVProgressHUD dismiss];
}
下面來介紹第三種方法
第三種方法的思路是這樣的判族,不對控制器數(shù)組中的元素做改變躺盛,而是直接在控制器數(shù)組中找到想要跳轉(zhuǎn)的那個控制器所在的位置,獲取到該控制器形帮,然后進行pop槽惫。
NSInteger num = self.navigationController.viewControllers.count;
if (num > 3) {
UIViewController *popVC = self.navigationController.viewControllers[num - 3];
[self.navigationController popToViewController:popVC animated:YES];
}
啊哈,就是這么簡單辩撑,完成跳轉(zhuǎn)
第三種方法是隨意跳轉(zhuǎn)的哦