iOS解除了ViewController回调问题

时间:2013-03-02 12:50:51

标签: ios

我有两个UIViewControllers A和B.

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

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

3 个答案:

答案 0 :(得分: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];

希望这会对你有所帮助。

一切顺利!!!

答案 1 :(得分:1)

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

iOS6为视图控制器引入了一个“倒带”功能,当你有A然后B然后是C ViewController时,你可以在呈现C时回放到A。

查看此link

答案 2 :(得分:1)

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

@property (nonatomic, strong) ControllerA *controllerA;

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

[controllerB setControllerA:self];

当你解雇控制器B时,使用完成块来调用你想要执行的控制器A的方法:

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

(一个可能的问题是,如果在控制器B之前取消分配controllerA,你将最终得到保留周期。如果是这种情况,你最好将controllerA设置为controllerB的委托并使用非正式协议)