2011-08-28 45 views
1

我有一個UIViewController與連接到幾個UIViews的IBOutlets。各種按鈕在視圖之間切換,但是當我爲控制器設置新視圖時會出現問題。控制器和視圖都處於橫向模式,但在第一對開關後,某些視圖以縱向模式顯示。什麼可能導致這種情況?切換視圖控制器視圖時出現奇怪的行爲?

+0

只是猜測,viewWillAppear的默認實現中有代碼檢測方向併爲橫向模式準備視圖。如果在改變視圖之前,你會調用新視圖的viewWillAppear? – morningstar

+0

UIView沒有-viewWillAppear方法。我做了你用UIViewController的-viewWillAppear建議的,但沒有改變。 – Jumhyn

+0

你的所有觀點都應該是在風景中,還是在肖像中的一些? – msgambel

回答

-1

檢查是否已在所有視圖中啓用這種方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

此外,有你在模擬器或設備上看到了什麼?

+0

兩者以及如何將該方法添加到UIView? – Jumhyn

+0

您只需將此代碼複製並粘貼到每個視圖控制器以使其生效。 – TommyG

+0

是的,我已經在UIViewController中有它。我只是不明白你的意思添加到視圖。任何其他想法? – Jumhyn

2

您應該檢查您的所有UIViewControllers實施方法shouldAutorotateToInterfaceOrientation。該方法告訴操作系統在哪個位置(屏幕方向)UIViews由該控制UIViewControllers可以顯示。

如果要將所有視圖僅以橫向顯示,那麼該方法僅應返回YESinterfaceOrintation == UIInterfaceOrientationLandscapeLeftinterfaceOrintation == UIInterfaceOrientationLandscapeRight。如果你只想要肖像方向,那麼interfaceOrintation == UIInterfaceOrientationPortrait

例如(只支持橫向模式):

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
} 

而且你應該檢查你的項目設置,設置適當的支持的設備取向(又稱支持的接口方向)。

+0

是的,我已經完成了所有這些。正如我所說,它顯示一次罰款,然後幾個開關後停止工作。 – Jumhyn

0

我認爲你應該在IB中將視圖設置爲橫向模式。如果這已經完成,那麼我會建議不要明確地更改視圖控制器的視圖。實現一種可以改變視圖的方法。
詳細信息:
將視圖設置爲您的視圖控制器的視圖,然後每個其他視圖應該是此視圖的子視圖。您可以通過移除所呈現的視圖並添加新視圖或其他方法來實現視圖更改,從而將所有視圖添加到IB中作爲子視圖,隱藏所有視圖,然後在想要更改時取消隱藏所需視圖並隱藏所有其他。
我希望你能理解我的方法,如果不是,那麼我在這裏回答你的問題。
這種方式很容易實現。 :)

+0

我嘗試了刪除和添加子視圖的方式,儘管我喜歡隱藏和取消隱藏視圖的方法。我會明天嘗試,如果它有效,在賞金到期前回到這裏:P – Jumhyn

+0

那麼,它不起作用? –

+0

不,對不起。由於這種情況非常特殊,我想不適合尋求一些真實世界的幫助。 – Jumhyn

-1

這可能是一個模擬器錯誤,但嘗試使用單獨的UIViewController對象爲每個視圖,而不是一個控制器的所有視圖。就我個人而言,我從來沒有遇到任何方向上的困難,但我以編程方式做事。我建議你也這樣做(你可能不需要轉換所有程序的xib文件,但可能只是你遇到問題的那個)。只要確保你用於該視圖的所有UIViewController都有:shouldAutorotateToInterfaceOrientation就可以正確設置,並且事情應該可以正常工作。

希望這會有所幫助。

+0

不要重複回答 – Nekto

相關問題