iOS - 访问Modal的父属性

问题描述:

我可能过于复杂,但有没有办法访问模态父项的属性?iOS - 访问Modal的父属性

所以,我称之为“presentModalViewController”,然后我可以访问视图控制器上的一些属性,从模态中调用它。

感谢, 阿什利

+0

以我的经验,我总是使用委托模式来获取/设置当前呈现模式的视图的parentView属性。 – Sakares 2012-04-29 14:03:15

好了,既然问这个问题我已经试过这看上去好像他们的工作,但没有一些技巧。

这样的例子就是这样。

((pController *)self.parentViewController).testString; 

然而,虽然这是一个普通的UIViewController所呈现的模式,家长实际上是一个的UITabBarController,甚至使用selectedViewController没有工作。

我的解决办法是添加到我的模式的.h文件中

id delegate; 

@property (nonatomic, assign) id delegate; 

在实现文件中合成它后,分配/初始化的modalViewController,但呈现了,我只是之前设置

modalViewController.delegate = self; 

这样我就可以在我的模态中调用self.delegate。这仍然是不够的,因为这并没有说哪个浏览器是的,所以我不能说

self.delegate.testString; 

但我前面学到的铸造让我得到

((pController *)self.delegate).testString; 
一个完全可行的解决方案

我希望我不只是喋喋不休,我希望这可以帮助未来的人。

+2

正确的方法是定义一个协议,并将委托定义为id 委托。那么在访问点上,你可以调用self.delegate.testString而不是强制转换。 – fengd 2012-05-02 14:16:03

,如果您使用的是iOS 5,你可以调用self.presentingViewController访问父视图控制器

这里是apple reference

+0

我让这个应用程序支持较旧的iOS版本,所以我不能这样做。 谢谢无论如何。 – 2012-04-29 14:47:04

你的答案是接近正确的 - 你想presentingViewController而非parentViewController,但是这可能如果你不小心,会导致紧密耦合(两个类之间的依赖关系,这意味着它们只能与对方一起工作)。

这是最好还是定义一个协议,但你的委托财产是没有必要的 - 这将具有相同的值作为presentingViewController财产。

+0

presentsViewController仅适用于iOS5,并且这需要与旧版本兼容。 – 2012-04-29 14:48:13