iOS視圖跳轉的總結

1、self.view addSubView:view、self.window addSubView,需要注意的是,這個方法只是把頁面加在當前頁面。

 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.pushViewControllerpopViewController 是不行的。要想使用pushViewControllerpopViewController進行視圖間的切換,就必須要求當前視圖是個NavigationController。

2、使用self.navigationControler pushViewControllerpopViewController來進行視圖切換的,pushViewController是進入到下一個視圖,popViewController是返回到上一視圖。

3、沒有NavigationController導航欄的話,使用self.presentViewControllerself.dismissModalViewController實現(xiàn)控制器之間的切換,不能用作視圖之間的切換。
4、要想使用pushViewControllerpopViewController來進行視圖切換,首先要確保根視圖是NavigationController,不然是不可以用的。這里提供一個簡單的方法讓該視圖或者根視圖是NavigationController。自己定義個子類繼承UINavigationController,然后將要展現(xiàn)的視圖包裝到這個子類中,這樣就可以使這個視圖是個NavigationController了。提供的這個方法有很好的好處,就是可以統(tǒng)一的控制各個視圖的屏幕旋轉。

注意:
1、
在變成過程中,經(jīng)常遇到兩個視圖控制器之間的切換,導航控制器即UINaVigation是最常用的一種,有時為了某些效果又需要進行模態(tài)切換,即present。
我們的布局經(jīng)常是在window上加一個nav,然后以viewControl作為nav的根視圖進行導航。如果在導航之間有了一個present之后,你會發(fā)現(xiàn)當前頁面的navigationController是空的,也就是說導航控制器不管用了
下面就給大家介紹兩種比較有效的方法:
第一:在進行present之前,重新生成一個導航控制器,然后將下一個視圖作為新生成的導航控制器的跟視圖,將導航控制器present就行了,

ThirdViewController *thirdCtr=[[ThirdViewController alloc]init];  
  
UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:thirdCtr];  
  
[self presentViewController:nav animated:YES completion:nil];  

這樣的話問題基本解決了,但就是沒有回到最初的跟視圖,只能在當前的導航控制器之間切換。

第二種方法就比較好了,獲取當前的window實例,在得到widow的跟視圖,即為導航器,然后根據(jù)導航器的索引就可以找到當前的視圖了

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一般用于邏輯上的層次關系的應用,能夠適應更加復雜一點的場景,畢竟導航控制器提供了多頁面管理方法。

3、遇到的問題
Warning: Attempt to present * on * which is already presenting (null)

http://stackoverflow.com/questions/32696615/warning-attempt-to-present-on-which-is-already-presenting-null

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • *7月8日上午 N:Block :跟一個函數(shù)塊差不多,會對里面所有的內容的引用計數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,738評論 1 14
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,447評論 4 61
  • 嘴角上揚 2016 9 21 二十一天寫作訓練營已經(jīng)結束了,學會了很多東西。不僅僅是關于寫作方面的,更多的是思想...
    嘴角尚揚閱讀 552評論 0 0
  • 不知不覺我還是想著這天 想著凌晨兩點拿著單子 在那無一人的走廊獨自淚流前行 想著當我尋不到你任何訊息 那種恐懼和不...
    桃淘閱讀 180評論 0 0
  • 錯過他,遇見我,這里是約吧電臺,這里沒有空調要上吊的高溫,沒有心煩意燥的喧囂,只有說給你聽的歌。 慢歌,民謠,嘻哈...
    米可變形記閱讀 464評論 0 0

友情鏈接更多精彩內容