1

从 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 世界,我觉得这相当麻烦。- 需要在单独的文件中定义这样的协议并需要使用委托 - 只是为了完成最正常的任务,比如关闭屏幕......

没有更简单的不太复杂的方法,还是必须这样做?

例如,就像[self dismiss]在 SecondVC 中一样——没有委托,没有协议——他不是很好吗?

非常感谢!

4

2 回答 2

4

你可以打电话

dismissViewControllerAnimated:completion:

在呈现的视图控制器上,尽管这并不是最佳实践。

来自 Apple 的文档:

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

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

当需要关闭呈现的视图控制器时,首选的方法是让呈现的视图控制器关闭它。换句话说,只要有可能,呈现视图控制器的同一个视图控制器也应该负责解除它。尽管有几种技术可以通知呈现视图控制器其呈现的视图控制器应该被解除,但首选技术是委托。

于 2012-07-21T22:31:15.387 回答
2

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

[self dismissViewControllerAnimated:YES completion:NULL];

UIViewController 文档

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

于 2012-07-21T22:28:48.923 回答