1

我有两个 UIViewControllers A 和 B。

[self presentViewController:B animated:YES completion:nil];

在我调用之后,dismissViewController:我需要能够调用已经呈现 B ViewController 的父 ViewController 中的某些方法。我认为-viewWillAppear方法会被调用,但解雇后它不起作用。

4

3 回答 3

1

当您创建对象时,B ViewController然后实现一个自定义init方法,如下所示:

把这个方法放在B ViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withParentView:(UIViewController *)parentViewController
 {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    self.pViewController = parentViewController;
   // Custom code
}
return self;

}

当您创建 B View Controller 的对象时,然后使用上述方法,您的parentViewController将是self

而在解雇你的时候,你会打电话

[self.pViewController viewWillAppear:NO];

希望这会帮助你。

祝一切顺利!!!

于 2013-03-02T12:59:32.337 回答
1

解决方案是要求“A” ViewController 关闭“B” ViewController(通过指向 A ViewController 的指针),然后在完成代码中执行您想要的操作。

iOS6 为视图控制器引入了“倒带”功能,当您有 A 然后 B 然后是 C ViewController 时,您可以在出现 C 时倒退到 A。

看看这个链接

于 2013-03-02T13:06:42.780 回答
1

在控制器 B 子类中,为控制器 A 创建一个属性。

@property (nonatomic, strong) ControllerA *controllerA;

在呈现控制器 B 之前,请设置属性:

[controllerB setControllerA:self];

当您关闭控制器 B 时,使用完成块调用您要执行的控制器 A 的方法:

   [self dismissViewControllerAnimated:YES completion:^{
        [self.controllerA doSomething];
    }];

(一个可能的问题是,如果在控制器 B 之前释放了控制器 A,那么您最终会得到一个保留周期。如果是这种情况,最好将控制器 A 设置为控制器 B 的代表并使用非正式协议)

于 2013-03-02T16:17:08.670 回答