无法通过 UINavigationcontroller.viewControllers 更改类的属性

Posted

技术标签:

【中文标题】无法通过 UINavigationcontroller.viewControllers 更改类的属性【英文标题】:Unable to change property on class through UINavigationcontroller.viewControllers 【发布时间】:2013-01-29 16:21:08 【问题描述】:

我正在使用这种方法尝试在我的一个类中获取UIScrollView 的属性:

AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
UINavigationController *nav = delegate.frontViewController.navigationController;
for (UIViewController *controller in nav.viewControllers) 
    if ([controller isKindOfClass:[SGInitialViewController class]]) 
        SGInitialViewController *sgInitialController = (SGInitialViewController *)controller;
        SGPlotViewController *plotVC = [sgInitialController.childViewControllers objectAtIndex:0];
        [plotVC.scrollViewMain setUserInteractionEnabled:NO];
    

SGInitialViewController 类当前加载,其childViewController SGPlotViewController加载,并且在屏幕上。 无论我多么努力,我都无法改变它的属性。 关于我做错了什么有什么想法吗?

【问题讨论】:

我认为有更好的方法可以做到这一点,正如我在回答中所说的那样,但如果你想调试这个,首先要向后记录。首先记录 plotVC,如果没有返回你想要的,记录 sgInitialController 等。 【参考方案1】:

如果不详细了解应用的整体结构,很难看出问题出在哪里。然而,挖掘所有这些控制器以获取属性并不是一个好的设计。如果可以使用委托,您应该这样做——不过,有时,根据所有这些控制器的设置方式,很难获得正确的引用,因此类可以将自己设置为委托。在这些情况下,最好使用通知。哪个类包含您在问题中的代码应该发布通知,并且应该注册 SGPlotViewController 以接收该通知。

【讨论】:

以上是关于无法通过 UINavigationcontroller.viewControllers 更改类的属性的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController

UINavigationController 风格

全屏显示 ViewController

多控制器

UINavigationControllerDelegate 不起作用

viewController 出现时出现黑色