1变汪、[self.view addSubView:view];和[self.window addSubView:view];需要注意祸憋,此方法只是把頁面(view)加在當(dāng)前頁面(view)上,控制器(viewController)還是原來那個控制器唱捣。此時再用[self.navigationColler pushViewController:animated:];和 [self.navigationController popViewControllerAnimated:];?是不行的公浪。要想使用pushViewController和popViewController進(jìn)行視圖間的切換,就必須要求當(dāng)前視圖是個NavigationController泞莉。
2并扇、有NavigationController導(dǎo)航欄的話琼腔,使用[self.navigationColler pushViewController:animated:];和[self.navigationController popViewControllerAnimated:];來進(jìn)行視圖切換。pushViewController是進(jìn)入到下一個視圖斟叼,popViewController是返回到上一視圖偶惠。
3、沒有NavigationController導(dǎo)航欄的話朗涩,使用[self presentViewController:animated:completion:];和[self dismissViewControllerAnimated:completion:];具體是使用可以從文檔中詳細(xì)了解忽孽。
4、要想使用pushViewController和popViewController來進(jìn)行視圖切換谢床,首先要確保根視圖是NavigationController兄一,不然是不可以用的。這里提供一個簡單的方法讓該視圖或者根視圖是NavigationController识腿。自己定義個子類繼承UINavigationController出革,然后將要展現(xiàn)的視圖包裝到這個子類中,這樣就可以使NavigationController了渡讼。提供的這個方法有很好的好處骂束,就是可以統(tǒng)一的控制各個視圖的屏幕旋轉(zhuǎn)费薄。將一個控制器(UIViewController)包裝成一個導(dǎo)航控制器(UINavigationController):
UIViewController?*vc = [[UIViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
1.用UINavigationController的時候用
----進(jìn)入下一個視圖[self.navigationColler pushViewController:animated:];
----返回之前的視圖[self.navigationController popViewControllerAnimated:];
----ps:push以后會在navigation的left bar自動添加back按鈕,它的響應(yīng)方法就是返回栖雾。所以一般不需要寫返回方法楞抡,點back按鈕即可。
2.其他時候(視圖不是UINavigationController的時候析藕,只是一個viewController時)
----進(jìn)入下一個視圖:[self presentViewController:animated:completion:];
----返回之前的視圖:[self dismissViewControllerAnimated:completion:];
3.切換視圖一般用不到addSubview
UINavigationController是導(dǎo)航控制器召廷,如果pushViewController的話,會跳轉(zhuǎn)到下一個ViewController账胧,點返回會回到現(xiàn)在這個ViewController竞慢;如果是addSubview的話,其實還是對當(dāng)前的ViewController操作治泥,只是在當(dāng)前視圖上面又“蓋”住了一層視圖筹煮,其實原來的畫面在下面呢,看不到而已居夹。(當(dāng)然败潦,也可以用insertSubView ?atIndex那個方法設(shè)置放置的層次)。
4.另加一個:
使用presentViewControllerAnimated方法從A->B->C准脂,若想在C中直接返回A劫扒,則可這樣實現(xiàn):
C中返回事件:
void?back
{
[self?dismissViewControllerAnimated:NO];//注意一定是NO!狸膏!
[[NSNotificationCenter??defaultCenter]postNotificationName:@"backback"?object:nil];
}
然后在B中沟饥,
//在viewdidload中:
[[NSNotificationCenter?defaultCenter]?addObserver:self?selector:@selector(back)?name:@"backback"?object:nil];
-(void)back
{
[self?dismissViewControllerAnimated:YES];
}