2012-06-27 94 views
0

在iOS 5上,當我嘗試使用presentModalViewController從另一個視圖控制器呈現任何視圖控制器時,模態視圖顯示在當前視圖的後面。UIViewController以模態形式顯示在當前視圖後面

由於它工作正常,在iOS 4和知道presentModalViewController已經在iOS 5中被否決,我嘗試使用presentViewController沒有運氣。

這是我第一次遇到這個問題,關於什麼可能導致這種奇怪的行爲的任何想法?

+0

也許你在UIWindow有一些意見? –

+0

@AliaksandrAndrashuk我不知道我在這裏得到你的意思... –

回答

0

我終於找到了問題。出於某些尷尬的原因,根窗口的rootViewController未正確設置,導致模態視圖出現奇怪的行爲。

更令人費解的是,它在iOS 4上運行良好,並且在iOS 5上失敗了。我相信我仍然錯過了導致這種問題的真正原因,但正確設置rootViewControllerAppDelegate解決了問題。

+0

我覺得這是我的問題這個代碼'[[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:self.imagePicker animated:YES completion:nil];'給出錯誤:'Warning:嘗試呈現上,其視圖不在窗口層次結構中!'。你是如何正確設定的? –

+0

其實,我完全重寫了這部分代碼。我不知道自己究竟出了什麼問題,以及我如何解決問題......對不起,我無法提供任何幫助。 –

+0

對於後人,這裏是我如何解決這個問題。在頁面上搜索「hack」以查看實現。 https://github.com/fulldecent/FDTake/blob/master/FDTakeExample/FDTakeController.m –

0

我相信問題是你沒有設置適當的模式演示風格。 http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UIModalPresentationStyle

此示例應該在您現有的視圖控制器上觸發全屏模式。

[self setModalPresentationStyle:UIModalPresentationFullScreen]; 
ViewController2 *vc = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil]; 
[self presentViewController:vc animated:YES completion:NULL]; 
+0

不幸的是,這是行不通的,該觀點仍然存在於其他任何東西之後。不過謝謝! –

+0

你用什麼方法觸發你的模態?我注意到測試的一件事是,如果我試圖在viewDidLoad中調用它,我沒有看到我的模態,但是如果我在viewDidAppear方法中調用模態,我可以看到它。 – propstm

+0

在調用'viewDidAppear'後很長時間,用戶按下按鈕時會觸發模式。我已經成功完成了數千次,但今天我錯過了一些東西。這讓我感到困惑。 –

0

不知道如果你使用一個按鈕來呈現視圖控制器,但如果你是這應該工作。在視圖控制器中創建一個新的函數,如下所示。這會在視圖中實例化您的視圖和導航控制器,以便之後可以解散。

- (void)buttonPressed { 
    UIViewController *yourViewController = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
    UINavigationController *navigationController = [[UINavigationController] alloc] initWithRootViewController:yourViewController]; 
    [self presentModalViewController:navigationController animated:YES]; 
    } 

然後在viewDidLoad中你有這樣的事情(如果你是從一個按鈕呈現它)。下面的代碼是針對UIBarButtonItem的,但其他按鈕應該以類似的方式工作。只要確保將操作參數設置爲@selector(buttonPressed),或者在按下按鈕時調用所需函數的名稱。

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] init]                     
target:self                   
action:@selector(buttonPressed)]; 
+0

我實際上擁有相同的代碼,來自'UINavigationController'實例的appart。可悲的是,增加它沒有效果。另外,在某些情況下,我提供了一個'UIImagePickerController',它不需要導航控制器。使用'UIImagePickerController'讓我相信控制器是在當前視圖後面顯示的,因爲在這種情況下,狀態欄消失了,並覆蓋了「攝像機視圖」。 –

相關問題