打开和关闭其他UIViewControllers - 除了使用协议和放大器之外的任何其他方法。代表?

时间:2012-07-21 22:08:00

标签: iphone ios uiviewcontroller delegates

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

    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应用程序并回到iOS世界,我觉得这很麻烦。 - 需要在单独的文件中定义这样的协议&amp;需要使用委托 - 所有这些只是为了完成最正常的任务,比如关闭屏幕......

是不是有一种更容易复杂的方式,还是只是必须这样做?

例如像SecondVC中的[self dismiss] - 没有委托,没有协议 - 他不是真的很好吗?

非常感谢!

2 个答案:

答案 0 :(得分:4)

你可以打电话

dismissViewControllerAnimated:completion:

在提供的viewcontroller上,虽然这不是最佳实践。

来自Apple的文档:

  

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

同样来自Apple的文档(http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

  

当解雇一个呈现的视图控制器时,   首选方法是让呈现视图控制器解除   它。换句话说,只要有可能,就是相同的视图控制器   提出视图控制器也应该承担责任   解雇它。虽然有几种技术可以通知   呈现视图控制器,其呈现的视图控制器应该   被驳回,首选技术是授权。

答案 1 :(得分:2)

您所描述的并不是最简单的模式。实际上你应该做一些与你的建议非常相似的事情。当SecondVC准备被解雇时,它只需要调用,例如:

[self dismissViewControllerAnimated:YES completion:NULL];

来自UIViewController documentation

  

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