2013-07-23 67 views
2

在我的iOS應用程序中,我嘗試呈現當前新的ViewController「above」。繼this蘋果方針,在一些事件中,我使用下面的代碼:iOS - 用presentViewController呈現ViewController:不起作用

MyViewController* vc = [[MyViewController alloc] initWithNibName: nil bundle: nil]; 
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 

UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController: vc]; 
[mainController presentViewController:nc animated:YES completion:nil]; 

該代碼被稱爲(和它發生主控制器加載成功後,未在viewDidLoad中)和新觀點出現使用選擇過渡方式。
已創建MyViewController類,並且它的方法(如viewDidLoad和supportedInterfaceOrientations)已成功調用。

現在問題來了。
在界面生成器中,我創建控制器,將其類設置爲MyViewController。例如,我在這個控制器裏創建了一些視圖,UIButton。 MyViewController有屬性

IBOutlet UIButton* button 

在故事板上,放置的UIButton的引用出口設置爲控制器的「按鈕」屬性。作爲一個雙重檢查,在故事板上的視圖控制器的「Outlets」部分,「button」綁定到放置的UIButton對象。

但是,當調用viewDidLoad時,button屬性的值爲零。自然,按鈕不顯示。這同樣兩個UITableView對象(它們的數據源和委託都設置爲相同的視圖控制器和MyViewController符合

<UITableViewDelegate, UITableViewDataSource> 

的情況下,這一點很重要)。

此外,出現的黑色屏幕忽略所有觸摸(並且滑動手勢識別器放置在故事板上的控制器上)。但它對方向變化作出反應。
我想問題是MyViewController創建的實例無法「看到」故事板,我錯過了一些非常基本的東西,但我在蘋果文檔中看不到任何提示。

+0

只要'[[MyViewController alloc] init]'它應該自動拾取正確的nib/bundle。 –

+0

@MikeWeller不,它沒有。 init實際上導致調用initWithNibName:Bundle:兩個參數都是零。 – Abstraction

+0

我只是說它更簡單和更清潔(恕我直言)。 –

回答

3

您正在以錯誤的方式初始化MyViewController。因爲您正在使用「Storyboard」,所以您應該查看標識符名稱(在故事板中),然後從故事板初始化您的控制器。

MyViewController* vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewControllerIdentifier"]; 
+0

謝謝。這工作得很好。在附註中,如果某人遇到同樣的問題,修復後會出現表格視圖中單元格標識符的問題,務必檢查[本文](http://stackoverflow.com/questions/12737860/assertion-failure- in-dequeuereusablecellwithidentifierforindexpath)。 – Abstraction

+0

這可能會有所幫助,問題在於,在ios 7上它不能以這種方式工作...... –

相關問題