我有两个 UIViewControllers A 和 B。
[self presentViewController:B animated:YES completion:nil];
在我调用之后,dismissViewController:
我需要能够调用已经呈现 B ViewController 的父 ViewController 中的某些方法。我认为-viewWillAppear
方法会被调用,但解雇后它不起作用。
我有两个 UIViewControllers A 和 B。
[self presentViewController:B animated:YES completion:nil];
在我调用之后,dismissViewController:
我需要能够调用已经呈现 B ViewController 的父 ViewController 中的某些方法。我认为-viewWillAppear
方法会被调用,但解雇后它不起作用。
当您创建对象时,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];
希望这会帮助你。
祝一切顺利!!!
解决方案是要求“A” ViewController 关闭“B” ViewController(通过指向 A ViewController 的指针),然后在完成代码中执行您想要的操作。
iOS6 为视图控制器引入了“倒带”功能,当您有 A 然后 B 然后是 C ViewController 时,您可以在出现 C 时倒退到 A。
看看这个链接
在控制器 B 子类中,为控制器 A 创建一个属性。
@property (nonatomic, strong) ControllerA *controllerA;
在呈现控制器 B 之前,请设置属性:
[controllerB setControllerA:self];
当您关闭控制器 B 时,使用完成块调用您要执行的控制器 A 的方法:
[self dismissViewControllerAnimated:YES completion:^{
[self.controllerA doSomething];
}];
(一个可能的问题是,如果在控制器 B 之前释放了控制器 A,那么您最终会得到一个保留周期。如果是这种情况,最好将控制器 A 设置为控制器 B 的代表并使用非正式协议)