2013-03-02 63 views
1

我有两个UIViewControllers A和B.的iOS解雇的ViewController回调问题

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

我调用dismissViewController:后我需要调用在已经提出的乙ViewControlller父视图控制器的一些方法的能力。我认为-viewWillAppear方法会被调用,但在解雇后它不起作用。

+0

它们是否都在导航控制器中? – Spectravideo328 2013-03-02 13:02:44

+0

不,他们不是。 – 2013-03-02 13:10:32

回答

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观看控制器的对象,然后使用上面的方法和你的parentViewController自我

而在解雇你的时间凸轮调用

[self.pViewController viewWillAppear:NO]; 

希望这会帮助你。

所有最好的!

+0

所以,我有能力使用self.parentViewController属性并调用viewWillAppear方法。 – 2013-03-02 13:12:46

1

解决方法是要求“A”ViewController关闭“B”ViewController(通过指向ViewController的指针),然后在完成代码中执行所需操作。当你有一个那么B则C的ViewController

iOS6的推出了视图控制器“回退”功能,你可以,当呈现C,后退到A.

看看这个link

1

在你控制器B的子类,创建控制器A

@property (nonatomic, strong) ControllerA *controllerA;

属性你之前存在控制器B,设置属性:

[controllerB setControllerA:self];

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

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

(一个可能的疑难杂症是,你结了如果控制器A在控制器B之前解除分配,则为保留周期。如果是这样的话,您最好将controllerA设置为controllerB的代表并使用非正式协议)