从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]
- 没有委托,没有协议 - 他不是真的很好吗?
非常感谢!
答案 0 :(得分:4)
你可以打电话
dismissViewControllerAnimated:completion:
在提供的viewcontroller上,虽然这不是最佳实践。
来自Apple的文档:
呈现视图控制器负责解除视图 它呈现的控制器。如果在显示的视图上调用此方法 控制器本身,它会自动将消息转发给 呈现视图控制器。
当解雇一个呈现的视图控制器时, 首选方法是让呈现视图控制器解除 它。换句话说,只要有可能,就是相同的视图控制器 提出视图控制器也应该承担责任 解雇它。虽然有几种技术可以通知 呈现视图控制器,其呈现的视图控制器应该 被驳回,首选技术是授权。
答案 1 :(得分:2)
您所描述的并不是最简单的模式。实际上你应该做一些与你的建议非常相似的事情。当SecondVC准备被解雇时,它只需要调用,例如:
[self dismissViewControllerAnimated:YES completion:NULL];
来自UIViewController documentation:
呈现视图控制器负责解除它所呈现的视图控制器。 如果您在呈现的视图控制器本身上调用此方法,它会自动将消息转发给呈现视图控制器。