![](/img/trans.png)
[英]How do I call a method present in root view controller from my second view controller?
[英]How do I remove a view controller from my view hierarchy?
我的應用程序有一個歡迎屏幕,只能在縱向模式下顯示。 在用戶點擊了歡迎屏幕之后,我想顯示另一個可以在人像模式和橫向模式下使用的屏幕。
我已經設置了一個實現一個視圖控制器shouldAutorotateToInterfaceOrientation:
返回YES
僅UIInterfaceOrientationPortrait
,和我的視圖添加到與窗口[window addSubView:view]
。 我將此視圖標記為1
。
當用戶在歡迎視圖中點擊並應用程序移至新視圖時,我將執行以下操作:
[[window viewWithTag:1] removeFromSuperView];
[window addSubView:myViewController.view];
其中myViewController是第二個視圖的視圖控制器的實例(可正確處理shouldAutorotateToInterfceOrientation
方法)。
現在,當我旋轉時,它仍然在原始視圖的視圖控制器上調用shouldAutorotateToInterfceOrientation
,而不在新視圖的視圖控制器上調用它。
蘋果公司的這份說明說,只有一個視圖控制器將獲得輪換通知。 但是,我已經刪除了另一個視圖控制器。
我究竟做錯了什么?
實際上,該注釋並不是說“只有一個視圖控制器會收到通知”,而是說“只有添加到UIWindow的第一個視圖控制器才會旋轉”。 所以這可能是問題所在。
要解決此問題,我想說的是始終將一個視圖添加到您的窗口(稱為永久視圖),並將您的歡迎屏幕和下一個視圖添加到該永久視圖。
希望這可以幫助。
作為您鏈接到狀態的注釋:
只有添加到UIWindow的第一個視圖控制器將旋轉。
因此,請放置一個標志,以確保在用戶關閉屏幕之前,應該應該AutorotateToInterfceOrientation返回NO,然后再返回YES。 這是一個簡單且可行的解決方案-但是,從代碼可讀性的角度來看,“ dismissed”視圖實際上控制旋轉可能會造成混淆。
親身; 我的經驗是,旋轉某些視圖而不旋轉某些視圖並不是真正值得的,並且用戶往往不喜歡它。
快樂編碼
我寫了一個快速測試,顯示您要嘗試執行的操作。 這是我所做的基本操作:
創建兩個視圖控制器。 App首先通過NIB文件在AppDelegate中將第一個視圖控制器設置為實例變量viewController。 然后將其添加到您編寫的窗口中。
然后,我設置一個動作,該動作在被調用時(可以是計時器,第一個視圖控制器上的按鈕等)執行以下操作:
使用[self.viewController removeFromSuperview]刪除視圖。 這與標記的處理方式不同。
創建第二個視圖控制器並將其分配給self.viewController。
像您指定的那樣添加到窗口中。
不確定您的代碼有什么不正確。 我想也許第一個視圖並沒有真正被刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.