我有两个UIViewControllers A和B.
[self presentViewController:B animated:YES completion:nil];
在我调用dismissViewController:
之后,我需要能够在已呈现B ViewControlller的父ViewController中调用某个方法。我认为-viewWillAppear
方法会被调用,但在解雇后它不起作用。
答案 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的委托并使用非正式协议)