dismissViewControllerAnimated完成块演示者视图和模态视图流

Pat*_*cia 2 xcode objective-c ipad

我确实找到了这个标题的答案,我做了一些研究,但我仍然没有得到这个流程.这就是我想要发生的事情:

1)单击演示者视图上的按钮以打开模态视图.2)检索一些值并单击按钮以关闭模态视图....将值发送到presentor视图并执行方法.

我知道这就像回调一样,但我仍然无法弄清楚回调的内容.

那么,我该怎么做呢?A)在presentViewController完成块中,我应该在模态视图完成时包含要执行的演示者视图方法吗?

或者:B)在模态视图的dismissViewControllerAnimated完成块中,我应该包括在模态视图完成时执行的演示者视图方法吗?

有人可以帮我一些示例代码吗?或者至少帮助我获得将代码放入哪个块的流程?

谢谢,P

Pau*_*l.s 9

你谈到完成块,所以我假设你不想使用代理.

在将以模态方式呈现的viewController中,您需要提供一个公共完成处理程序,该处理程序在被解除时将被调用.

@interface PresentedViewController : UIViewController

@property (nonatomic, strong) void (^onCompletion)(id result);

@end
Run Code Online (Sandbox Code Playgroud)

然后在实现中,您需要在解雇时调用此完成块.这里我假设viewController在单击按钮时被解除

- (IBAction)done:(id)sender
{
  if (self.onCompletion) {
    self.onCompletion(self.someRetrievedValue);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在回到viewController,它提供了你需要提供实际完成块的模态 - 通常在你创建viewController时

- (IBAction)showModal;
{
  PresentedViewController *controller = [[PresentedViewController alloc] init];
  controller.onCompletion = ^(id result) {
    [self doSomethingWithTheResult:result]
    [self dismissViewControllerAnimated:YES completion:nil];
  }
  [self presentViewController:controller animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

这将创建新的viewController,以模态方式呈现并定义完成时需要发生的事情.