2012-03-21 66 views
1

我試圖創建一個嵌套的故事板結構來幫助分解一個巨大的故事板(SVN合併惡夢)......無論如何,我有一個父故事板/ viewController在此案例'NestedStoryTestViewContoller'和另外兩個故事板/ ViewControllers(分別爲StoryOne和StoryTwo)IOS:無法從PresentViewController訪問presentationViewController的屬性和方法

當您單擊NestedStoryTestViewContoller中的按鈕啓動StoryOne作爲模態視圖時。然後我可以解散它並返回到NestedStoryTestViewController。但是,如果我想從StoryOne直接轉到StoryTwo,我會遇到問題。我想要做的是這樣的:

-(IBAction)goToStoryTwo{ 

    UIStoryboard *storyTwo = [UIStoryboard storyboardWithName:@"BoardTwo" bundle:nil]; 
    UIViewController *boardTwoVC = [storyTwo instantiateInitialViewController]; 
    boardTwoVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self.presentingViewController presentModalViewController:boardTwoVC animated:YES]; 

} 

但這無能爲力。

我可以像解僱模態視圖:

-(IBAction)goToMain{ 

    [self dismissModalViewControllerAnimated:YES]; 
} 

和解聘modalview後,我可以打電話從NestedStoryTestViewController的viewDidLoad方法的新ModalView但是對於工作,我需要調用某種方法在NestedStoryTestViewCOntroller上設置一個屬性,告訴它加載哪個新的模態視圖。

當我嘗試調用這樣的方法我得到了什麼似乎像沒有理由一個漂亮的大胖子編譯器錯誤:

[self.presentingViewController setViewToLoad:@"StoryOne"]; 

觸發一個錯誤:比如自動引用計數問題「Reciever型‘的UIViewController’消息沒有聲明一個選擇器'setViewToLoad'的方法'

該方法是明確定義和實現的,我不知道爲什麼會拋出這個錯誤。當試圖在'presentsViewController'上設置任何屬性時,我也會得到同樣的錯誤。如果我輸入如下日誌語句:

NSLog(@"parent class : %@",[[self presentingViewController] class]); 

它按預期記錄'父類:NestedStoryTestViewController'。

任何幫助非常感謝,因爲這是工作,因此非常重要和及時。如有必要,我可以提供項目文件。

謝謝, 克里斯

請注意:我知道從「parentViewController」到「presentingViewController」名稱變更的,該項目是5.0只所以這不是問題。

+0

你第二個問題可以通過使用'[(NestedStoryTestViewController *)self.presentingViewController setViewToLoad:@「StoryOne」];'來解決。不知道第一個問題。 – lnafziger 2012-03-21 00:22:29

+0

由於這些都是不相關的問題,因此最好將它們作爲單獨的問題發佈。 – lnafziger 2012-03-21 00:22:54

+0

SWEEEET!你真棒!伊夫弗格先生!另一個問題真的只是背景,爲什麼我試圖按照我的方式去做這件事,我非常肯定它不起作用,因爲我無法創建另一個模態視圖,直到以前的模態視圖被動畫化。但隨着你的建議,我可以繼續實施我的多故事板解決方案。 – wwwWRX 2012-03-21 00:44:50

回答

0

,你得到錯誤以下行的原因:

[self.presentingViewController setViewToLoad:@"StoryOne"]; 

是因爲你在呼喚你的NestedStoryTestViewController類的方法,但是編譯器認爲它是一個UIViewController類。

既然你知道類是什麼,你需要「轉換」(或石膏)到正確的類型,這樣編譯器知道它將給你的方法作出迴應,就像這樣:

[(NestedStoryTestViewController *)self.presentingViewController setViewToLoad:@"StoryOne"]; 
+0

按照這個答案我做'[(ItViewController *)self.presentingViewController setSelectedBook:[_ BookItems objectAtIndex:[indexPath row]]];'。我也從xcode上的intellisense中獲得了「setSelectedBook」,但是我在運行時遇到以下錯誤,爲什麼? 「[UINavigationController setSelectedBook:]:無法識別的選擇發送到實例0x6b4ad10'」 – 2012-08-23 13:37:31

+0

所以我Rohit,你有沒有找到解決方案? – Nick 2012-11-01 13:49:39