打开和closures其他UIViewControllers – 除了使用协议和委托以外的其他方法?

从FirstVC屏幕中打开另一个屏幕的正常方法,所以可以再次closures它是这样的:

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

SecondVC.m必须导入一个协议来声明closuresSecondVC的方法

所以我总是要创build一个协议文件SecondVCProtocol.h ,看起来像这样:

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

然后在SecondVC.m我需要导入这个SecondVCProtocol.h文件,现在可以最终调用

  [self.delegate secondVCDidFinish] 

我刚刚完成了另一个Android应用程序,回到了iOS世界,我觉得这很麻烦。 – 需要在一个单独的文件中定义这样一个协议,并且需要使用一个委托 – 所有这些只是为了完成像closures一个屏幕这样的最正常的任务。

是不是有一个更简单,更复杂的方法,或者这只是它必须完成的方式?

例如像SecondVC中的[self dismiss] – 没有委托,没有协议 – 他会不会很好?

非常感谢!

你可以打电话

 dismissViewControllerAnimated:completion: 

在所提出的视图控制器上,尽pipe这不是最佳实践。

从苹果的文档:

呈现视图控制器负责解除其呈现的视图控制器。 如果您在呈现的视图控制器本身上调用此方法,它会自动将消息转发给呈现视图控制器。

另外从苹果的文档,虽然( http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

当需要closures一个呈现的视图控制器时,首选的方法是让呈现视图控制器closures它。 换句话说,只要有可能,呈现视图控制器的视图控制器也应该负责解除视图控制器。 虽然有几种技术用于通知呈现视图控制器它的呈现的视图控制器应该被解散,但是优选的技术是委派。

你所描述的不是最简单的模式。 其实你应该做一些非常相似的事情,你所build议的会很好。 当SecondVC准备好被解雇时,它只是调用,例如:

 [self dismissViewControllerAnimated:YES completion:NULL]; 

从UIViewController文档 :

呈现视图控制器负责解除其呈现的视图控制器。 如果您在呈现的视图控制器本身上调用此方法,它会自动将消息转发给呈现视图控制器。