如何在UIViewController中设置parentViewController?

mru*_*ueg 14 iphone cocoa-touch hierarchy uiviewcontroller parentviewcontroller

UIViewController的parentViewController属性是readonly,但我正在嵌套自定义视图控制器并希望使用此属性.

但是,由于它是只读的,我发现没有其他的方法来设置该属性,我quesion是:如何我设置呢?

显然,UINavigationController可以在-pushViewController中以某种方式设置属性,因此-presentModalViewController也是如此,所以它必须是可能的.

我知道我可以添加自己的UIViewController属性,但我确信parentViewController原则上是正确的属性.

abu*_*sky 11

解决方案是:

   - (void)setParentController:(UIViewController*)parent{
 [self setValue:parent forKey:@"_parentViewController"];
    }
Run Code Online (Sandbox Code Playgroud)

它不会导致链接器出现问题!

PS:不要使用"setParentViewController"作为方法名称,因为此方法存在于私有API中,Apple说:"应用程序中包含的非公共API是setParentViewController:.

如果您在源代码中使用与上述API相同的名称定义了一个方法,我们建议您更改方法名称,以便它不再与Apple的私有API发生冲突,以避免您的应用程序被标记为未来的提交.

请在下次更新中解决此问题......"

  • 这不会导致App Store拒绝吗?这解决了我的一些模态演示问题,但这很可怕. (3认同)

Kob*_*ski 10

我意识到这个问题是在iOS 5之前提出的,但是作为参考,你应该在想要嵌套UIViewControllers时使用addChildViewController.这也将自动设置parentViewController属性.

- (void)addChildViewController:(UIViewController *)childController NS_AVAILABLE_IOS(5_0);
Run Code Online (Sandbox Code Playgroud)

您可以在Apple阅读有关"创建自定义内容视图控制器"的更多信息.


Ale*_*lds 0

但是,由于它是只读的,并且我没有找到其他方法来设置此属性,我的问题是:如何设置它?

如果是readonly,则不能使用点表示法而不出现编译器错误

但是,您也许可以使用类别modifyParentViewController向类添加自定义方法UIViewController

即使该属性是只读的,变量本身也可能是可修改的(如果不是)@protected。如果是@protected,子类化视图控制器可能允许您选择修改变量。