如何从模态viewcontroller传递参数?

时间:2015-08-07 07:34:19

标签: ios objective-c ios7 uiviewcontroller ios8

我有两个viewcontrollers。这是第二个:

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

第二个模态窗口:

[self dismissViewControllerAnimated:YES completion:nil];

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

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您想要/告诉演示控制器从模态视图控制器中解除模态视图控制器

我认为这就是为什么你想把self作为“参数”传递给模态视图控制器的原因,以便它可以引用它并通过使用{来使它被忽略ModalViewController {1}}正如你提到的那样?

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

在模态视图控制器的头文件([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没有返回显示模态视图控制器的同一个控制器。因此,使用协议方法将确保我们希望相同的呈现视图控制器解除所呈现的控制器。