標籤:
最新:我並沒有記錯,是可以直接回到的
[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES];
如:A present B 然後B present C
現在想在C裡實現方法,能直接回到A,我原以為有類似的方法呢:self.parentviewcontroller dismiss.........
誰知剛才試了下不行,後來問群裡的兄弟 說我可以是記錯了,只有navigationcontroller的時候是可以直接回到rootviewcontroller的,而dismiss只能一層一層的去掉
難道沒有別的辦法實現直接dismiss到A了嗎: 非也!!!
根據群裡兄弟的建議:
你就B加委託,彈出C的時候,C調用dismiss,回調通知B也dismiss
轉載自: http://blog.csdn.net/kmyhy/article/details/7034202
一個View Controller A,彈出了一個Modal View Controller B,B又彈出了一個Modal ViewController C??and so on。
如果你在第n個Modal View Controller的時候,想回到第一個View Controller A,或者它前面的第m個ModalView Controller C,那怎麼辦?
你一定想,一層層地解散唄。沒錯,我一開始也是這樣乾的:在C裡解散D,在B裡解散C,在A裡解散B。那麼你會獲得一個“試圖解散當前未顯示的View Controller”錯誤。
蘋果的思維非同凡響,其實你只需要解散一個Modal View Controller就可以了。即處於最底層的View Controller,這樣處於這個層之上的ModalView Controller統統會被解散。
例如:你只用在A中解散B,則C、D、E、F……統統會自動被解散了。
問題在於,你在F中如何獲得A? 如果是iOS 4,你可以使用parentViewController來獲得當前Modal ViewController的“父View Controller”並解散自己。如果是iOS 5,你就得用presentingViewController了。
這樣,你可以不停地parentViewController.parentViewController.parentViewController 下去就可以了。
代碼:
if ([self respondsToSelector:@selector(presentingViewController)]) { [self.presentingViewController.presentingViewControllerdismissModalViewControllerAnimated:YES]; // for IOS 5+} else { [self.parentViewController.parentViewControllerdismissModalViewControllerAnimated:YES]; // for pre IOS 5}
問題是,有時候你不好確定當前Modal View Controller是鏈中的哪一級。比如有一個工作流程,它在B處有兩個分支,一個是A->B->C->D,一個是A->B->D,走哪一個分支,依賴於使用者的選擇。不管D或者F,處理完之後都要返回到A來進行重新整理。
在D這個地方要返回A時,你不好決定要用幾個parentViewController才能返回A。因為可能是3個(分支1),也可能是2個(分支2)。這樣的情況下你只有用協議或者委託了。把A作為一個delegate,沿著工作流程不停地傳遞下去,這樣不管走分支1還是分支2的流程,D都始終有一個A的引用。當D的工作完成時,直接調用A實現的協議方法,在A的這個方法中解散B就可以了。
present的時候是可以直接回到第一個viewcon的