如何从模态 viewcontroller 传递参数?

How to pass parameters from a modal viewcontroller?

我有两个视图控制器。这是第二个:

UIViewController *modal = [[ModalViewController alloc]init];
[self presentViewController:modal animated:YES completion:nil];

第二个模态 window:

[self dismissViewControllerAnimated:YES completion:nil];

如何从模态视图控制器传递参数?

如果我对你的理解正确,你想制作/告诉呈现控制器关闭模态视图控制器from模态视图控制器?

我猜想这就是您考虑将 self 作为 "parameter" 传递给模态视图控制器的原因,以便它可以引用它并使其通过以下方式消除 ModalViewController正如您提到的 [self dismissViewControllerAnimated:YES completion:nil]; 的使用?

如果是这样,您可以使用协议:

在模态视图控制器的头文件 (.h) 中,声明:

@protocol ModalViewControllerProtocol

@require
 - (void)dismiss;
@end
@interface ModalViewController

在您提供的控制器中,在您的情况下是 ModalViewController,在 .h 中声明以下内容:

@property(assign, nonatomic) id<ModalViewControllerProtocol>myDelegate;

并制作您的呈现控制器以使其采用协议:

@interface presentingViewController <ModalViewControllerProtocol>

并且:

ModalViewController *modal = [[ModalViewController alloc] init];
modal.myDelegate = self;
[self presentViewController:modal animated:YES completion:nil];

当你的模态视图控制器被呈现并且你想告诉你的呈现控制器关闭它时,你可以这样做:

[self.myDelegate dismiss];

最后在呈现视图控制器中实现 dismiss 方法:

- (void)dismiss
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

人们也可以忘记所有上述内容,只需在呈现的视图控制器中调用以下内容(在您的情况下,ModalViewController):

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

但有些情况下 self.presentingViewController 不会返回呈现模态视图控制器的同一控制器。因此,使用协议方法将确保我们希望相同的呈现视图控制器关闭呈现的控制器。