2012-06-21 92 views
4

我知道這裏有3-5個類似的問題,但沒有答案可以解決我的問題。關閉兩個模態(表格)視圖控制器

我有一個ViewController打開一個模式(表)視圖控制器,它打開另一個。兩個模態視圖控制器實際上都是表視圖控制器。我試圖從第二個中解僱他們。我試着在類似問題上接受的每一個答案,他們都沒有爲我工作。

我試圖

[self dismissModalViewControllerAnimated:true] 

[self.parentViewController dismissModalViewControllerAnimated:true] 
[self.parentViewController.parentViewController dismissModalViewControllerAnimated:true] 

[self.presentingViewController dismissModalViewControllerAnimated:true] 
[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:true] 

當我嘗試選項2,3和5,沒有任何反應都沒有。當我使用選項1和4時,我會看到關閉模態視圖動畫和底層視圖本身,然後所有內容都會返回到第二模態視圖(此時不帶動畫)。

我開始認爲這與事實有關,我使用tableViewControllers模態視圖。

順便說一句,我打消了didSelectRowAtIndexPath中的模態視圖。

+0

您是否嘗試撥打4然後1? –

+0

我剛剛嘗試了你的建議,並且我已經獲得了程序行爲,就像我單獨使用這些選項時獲得的一樣(我有一個簡短的返回到基礎模態視圖,然後立即回覆到最後一個) – Eedoh

+0

http://stackoverflow.com/questions/4955638/dismiss-two-modal-view-controllers – pie

回答

2

試試這個: -

當您關閉您的SecondView設置應用程序委託文件BOOL標誌變量,並檢查變量在FirstViewviewWillAppear方法SecondView是否打開和關閉與否。如果是這樣,那麼[self dismissModalViewControllerAnimated:true]

+0

-1錯誤的架構選項。你正在創建'UIViewController'和'AppDelegate'之間的依賴關係。當你發展的時候,你應該從長遠的角度思考,而採用這種方法不利於鬆耦合。 – Peres

+0

我受到你的解決方案的啓發,錯誤我不使用委託文件。實際上我甚至不知道它們是什麼。 –

1

典型的模型視圖控制器行爲將建議您從調用視圖控制器而不是自我解僱模式視圖控制器。不是一個強硬而快速的規則,而是一個好的做法。

做到這一點,創建一個協議:

@protocol MyModalViewControllerDelegate 
    - (void)modalViewControllerDidFinish; 
    @end 

,使兩者parentViewController和FirstModalViewController是該協議的implemntors。

@interface FirstModalViewController <MyModalViewControllerDelegate> 

然後在這兩個FirstModalViewController.h和SecondModalViewController.h,添加:

@property id<MyModalViewControllerDelegate> modalViewControllerDelegate 

兩個parentViewController和FirstModalViewController,右調用presentModalViewController前:...,設置如下:

modalViewControllerAboutToAppear.modalViewControllerDelegate = self; 
    [self presentModalViewController:modalViewControllerAboutToAppear animated:YES]; 

接下來,在SecondModalViewController,在您確定該項目需要被解僱的代碼,調用

[self.modalViewControllerDelegate modalViewControllerDidFinish]; 

現在,在FirstModalViewController,具有如下功能:

- (void)modalViewControllerDidFinish:(MyModalViewController*)controller { 
     [self dismissModalViewControllerAnimated:YES] 
     [self.modalViewControllerDelegate modalViewControllerDidFinish]; 
    } 

最後,在父視圖控制器,你應該能夠執行:

- (void)modalViewControllerDidFinish:(MyModalViewController*)controller { 
     [self dismissModalViewControllerAnimated:YES] 
    } 
0

因爲我不使用委託的文件,我做了以下內容:

FirstView添加字段

BOOL mClose; 

FirstView add方法

- (void)close 
{ 
    mClose = YES; 
} 

FirstView方法viewDidAppear

if (mClose) 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

FirstView方法,其打開SecondView添加

[secondView closeWhenDone:self]; 

SecondView添加字段

FirstView *mParent; 

SecondView add方法

- (void)closeWhenDone:(FirstView*)parent 
{ 
    mParent = parent; 
} 

SecondView方法封閉其添加

[mParent close];