1胸墙、兩個controller之間的跳轉(zhuǎn):A--彈出->B仁烹,B--回到->A
1)利用UINavigationController,調(diào)用pushViewController筒占,進行跳轉(zhuǎn)妻献;這種采用壓棧和出棧的方式蛛株,進行Controller的管理团赁。
調(diào)用popViewControllerAnimated方法可以返回。
跳轉(zhuǎn)視圖:
[self.navigationController popViewControllerAnimated:YES];
2)利用UIViewController自身的presentModalViewController谨履,進行跳轉(zhuǎn)欢摄;
調(diào)用dismissModalViewControllerAnimated方法可以返回。
有個好處就是有個completion的block可用笋粟。
彈出視圖:
[self presentViewController:vc animated:YES completion:nil];
2怀挠、多個controller,跳轉(zhuǎn)到指定controller
1)使用UINavigationController害捕,可以很方便的跳到指定的controller绿淋,navigationController提供了多個方法供大家使用。
定義一個屬性尝盼,用來持有要跳轉(zhuǎn)到指定的controller
@property(nonatomic, weak) id delegate;
//跳轉(zhuǎn)到指定的controller
[self.navigationController popToViewController:self.delegate animated:YES];
//跳轉(zhuǎn)到根controller
[self.navigationController popToRootViewControllerAnimated:YES];
//跳轉(zhuǎn)到前一個controller
[self.navigationController popViewControllerAnimated:YES];
使用navigationController要注意的是吞滞,保持navigationController的一致性,例如盾沫,A裁赠、B、C赴精、D佩捞、E,依次彈出過程中祖娘,C自己重新創(chuàng)建了一個navigationController再彈出D失尖、E啊奄,
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:C];
[B presentViewController:nav animated:YES completion:nil];
然后渐苏,E使用navigationController pop到A是會崩潰的,因為C自己重新創(chuàng)建一個navigationController菇夸,就是重新創(chuàng)建了一個隊列琼富,依次把D、E壓入棧中庄新,A鞠眉、B屬于另一個隊列,不能跨隊列跳轉(zhuǎn)自然就蹦了择诈,在同一個隊列中是可以任意跳轉(zhuǎn)的械蹋。如下圖:
block的回調(diào):在跳轉(zhuǎn)controller的時候要調(diào)用block,是先調(diào)用block還是先pop controller呢羞芍?
對于像
B--回到->A
相連controller哗戈,誰先誰后是沒有什么影響的,但是跨多個controller的話荷科,就要考慮操作時間的問題了假如從E跳轉(zhuǎn)到A需要2秒唯咬,(A的block)block 1秒就執(zhí)行完纱注,先調(diào)用block的話,block不一定會執(zhí)行成功胆胰。所以要先pop controller再執(zhí)行block狞贱,如上圖。
此外蜀涨,navigationController也不能push navigationController瞎嬉,會崩潰的,如下圖厚柳。