1、self.view addSubView:view
遗增、self.window addSubView
,需要注意的是结蟋,這個方法只是把頁面加在當(dāng)前頁面招刹。
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
[keyWindow addSubview:historynav.view];
dispatch_async(dispatch_get_main_queue(), ^ {
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
[keyWindow addSubview:historynav.view];
});
此時在用self.navigationControler.pushViewController
和 popViewController
是不行的妥粟。要想使用pushViewController
和popViewController
進(jìn)行視圖間的切換审丘,就必須要求當(dāng)前視圖是個NavigationController
。
2勾给、使用self.navigationControler pushViewController
和popViewController
來進(jìn)行視圖切換的滩报,pushViewController
是進(jìn)入到下一個視圖,popViewController
是返回到上一視圖播急。
3脓钾、沒有NavigationController
導(dǎo)航欄的話,使用self.presentViewController
和self.dismissModalViewController
實(shí)現(xiàn)控制器之間的切換旅择,不能用作視圖之間的切換惭笑。
4侣姆、要想使用pushViewController
和popViewController
來進(jìn)行視圖切換生真,首先要確保根視圖是NavigationController
,不然是不可以用的捺宗。這里提供一個簡單的方法讓該視圖或者根視圖是NavigationController
柱蟀。自己定義個子類繼承UINavigationController
,然后將要展現(xiàn)的視圖包裝到這個子類中蚜厉,這樣就可以使這個視圖是個NavigationController了
长已。提供的這個方法有很好的好處,就是可以統(tǒng)一的控制各個視圖的屏幕旋轉(zhuǎn)。
注意:
1术瓮、
在變成過程中康聂,經(jīng)常遇到兩個視圖控制器之間的切換,導(dǎo)航控制器即UINaVigation是最常用的一種胞四,有時為了某些效果又需要進(jìn)行模態(tài)切換恬汁,即present。
我們的布局經(jīng)常是在window上加一個nav,然后以viewControl作為nav的根視圖進(jìn)行導(dǎo)航辜伟。如果在導(dǎo)航之間有了一個present之后氓侧,你會發(fā)現(xiàn)當(dāng)前頁面的navigationController是空的,也就是說導(dǎo)航控制器不管用了
下面就給大家介紹兩種比較有效的方法:
第一:在進(jìn)行present之前导狡,重新生成一個導(dǎo)航控制器约巷,然后將下一個視圖作為新生成的導(dǎo)航控制器的跟視圖,將導(dǎo)航控制器present就行了旱捧,
ThirdViewController *thirdCtr=[[ThirdViewController alloc]init];
UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:thirdCtr];
[self presentViewController:nav animated:YES completion:nil];
這樣的話問題基本解決了独郎,但就是沒有回到最初的跟視圖,只能在當(dāng)前的導(dǎo)航控制器之間切換枚赡。
第二種方法就比較好了囚聚,獲取當(dāng)前的window實(shí)例,在得到widow的跟視圖标锄,即為導(dǎo)航器顽铸,然后根據(jù)導(dǎo)航器的索引就可以找到當(dāng)前的視圖了
FourthViewController *fourth=[[FourthViewController alloc]init];
UIWindow *window=[[UIApplication sharedApplication]keyWindow];
UINavigationController *nav0=(UINavigationController *)window.rootViewController;
UIViewController *viewController=[nav0.viewControllers objectAtIndex:1];
[viewController.navigationController pushViewController:fourth animated:YES];
2、push present的區(qū)別
present一般用于臨時性彈出一個頁面料皇;而push一般用于邏輯上的層次關(guān)系的應(yīng)用谓松,能夠適應(yīng)更加復(fù)雜一點(diǎn)的場景,畢竟導(dǎo)航控制器提供了多頁面管理方法践剂。
3鬼譬、遇到的問題
Warning: Attempt to present * on * which is already presenting (null)