2012-07-21 63 views
1

正常途徑從FirstVC屏幕中打開另一個屏幕,因此可以再次關閉它是這樣的:打開和關閉其他UIViewControllers - 除了使用協議和委託以外的其他方法?

SecondVC *secondVC = [[SecondVC alloc] initWithNibName:@"SecondVC" bundle:nil]; 
    secondVC.delegate = self; //needed to dismiss 
    [self presentModalViewController: secondVC animated: YES]; 

SecondVC.m已導入聲明呼籲關閉SecondVC

方法的協議

所以我總是要創建一個協議文件SecondVCProtocol.h基本上是這樣的:

@protocol SecondVCProtocol <NSObject> 
-(void)secondVCDidFinish; 
@end 

然後在SecondVC.m我需要導入此SecondVCProtocol.h文件,現在終於可以調用

[self.delegate secondVCDidFinish] 

我剛剛完成其他Android應用程序和beeing早在iOS的世界,我覺得這是相當麻煩的。 - 需要在一個單獨的文件&需要使用一個委託來定義這樣一個協議 - 一切只是爲了做最普通的任務如關閉屏幕...

是不是有更簡單的不太複雜的方法或者是這只是它必須完成的方式?

例如像[self dismiss] SecondVC - 沒有委託,沒有協議 - 他不會真的很好嗎?

非常感謝!

回答

4

您只需調用

dismissViewControllerAnimated:completion: 
上提出的ViewController

,雖然它是不完全的最佳實踐。

從蘋果公司的文檔:

的呈現視圖控制器負責駁回視圖 控制器它呈現。如果您在所呈現的視圖 控制器本身上調用此方法,它會自動將消息轉發給呈現視圖控制器的 。

從蘋果的文檔,但( http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

當談到時間駁回呈現視圖控制器

此外, 首選的方法是讓呈現視圖控制器駁回 它。換句話說,只要有可能, 呈現給視圖控制器的相同視圖控制器也應該對 負責解除視圖控制器。雖然有幾種技術用於通知 呈現視圖控制器,其所呈現的視圖控制器應當解除 ,但首選技術是委派。

+0

非常感謝你 - 我想我只是堅持「很好推薦的做法」 – user387184 2012-07-22 06:43:26

2

你所描述的不是最簡單的模式。其實你應該做一些非常類似於你認爲會很好的東西。當SecondVC準備被辭退它只是調用,例如:

[self dismissViewControllerAnimated:YES completion:NULL]; 

UIViewController documentation

的呈現視圖控制器負責貶所呈現的視圖控制器。 如果您在呈現的視圖控制器本身上調用此方法,它會自動將該消息轉發給呈現視圖控制器。

+0

其實,他所描述的是根據http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html – Sascha 2012-07-21 22:32:14

+0

好一點的「正常」模式。我改變了我的措辭。我一直使用代表團將其他信息實際傳達給父視圖控制器,而不僅僅是爲了解僱。然後協議(如果需要的話)自然不是如此空洞。 – 2012-07-21 22:44:04