地打开和关闭其它UIViewControllers - 使用比协议&委派任何其他方法?(openi

2019-06-26 11:30发布

正常方式从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的世界beeing回来了,我觉得这是相当麻烦的。 - 需要在一个单独的文件来定义这样的协议及需要使用一个委托 - 一切只是为了做最普通的任务如关闭屏幕...

是不是有一个更简单更简单的方式还是这只是它的方式做?

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

非常感谢!

Answer 1:

你可以叫

dismissViewControllerAnimated:completion:

所呈现的视图控制器,虽然它是不完全的最佳实践。

从苹果公司的文档:

所述呈现视图控制器负责贬呈现的视图控制器。 如果调用呈现视图控制器本身这个方法,它会自动将消息转发给呈现视图控制器。

同样来自苹果的文档,但( http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html )

当谈到时间以关闭一个呈现视图控制器,优选的做法是让所述呈现视图控制器关闭它。 换句话说,只要有可能,所呈现的视图控制器也应承担责任,驳回其相同的视图控制器。 虽然有用于通知其呈现视图控制器应当驳回呈现视图控制器的几种技术中,优选的技术是委托。



Answer 2:

What you describe is not the easiest pattern. Actually you should do something very similar to what you suggested would be nice. When SecondVC is ready to be dismissed it just calls, for example:

[self dismissViewControllerAnimated:YES completion:NULL];

From the UIViewController documentation:

The presenting view controller is responsible for dismissing the view controller it presented. If you call this method on the presented view controller itself, it automatically forwards the message to the presenting view controller.



文章来源: opening and closing other UIViewControllers - any other approaches than to use protocol & delegate?