【问题标题】:UIViewController HierarchyUIViewController 层次结构
【发布时间】:2011-12-28 17:20:55
【问题描述】:

如果有多个视图 - 比如说视图 1、视图 2、视图 3、视图 4 和视图 5,并且它们位于导航堆栈中,视图 5 是当前视图(位于顶部),我该如何访问在view5的控制器中用view3编写的方法?是否像在view5控制器中创建view3的控制器实例然后调用该方法一样?但这不是我相信的理想方法。这种情况的最佳方法是什么?

【问题讨论】:

  • 你要调用的方法是做什么的?
  • 它只是任何其他实例方法。
  • 我正在寻找的是方法的范围。基本上,如果 view3 中的方法是通用方法,需要在多个地方使用,它可能不属于视图控制器,而是属于某个实用程序类。
  • 视图5要调用的方法,是否依赖于视图3的状态;也就是说,如果让这个方法可用于基类并且 view1....view5 从这个基类派生,这有关系吗?
  • 正是.. 这就是我要找的。谢谢。

标签: iphone objective-c ipad uiviewcontroller delegates


【解决方案1】:

您可以通过访问导航控制器堆栈来访问它-

NSMutableArray *activeControllerArray = [self.navigationController.viewControllers mutableCopy];

Controller3 myController;
For(int i = 0, i <[activeControllerArray  count], i++) {
    if([[activeViewController objectAtIndex:i] isKindOfClass:[Controller3 class]) {
        myController = [activeViewController objectAtIndex:i];
     }
}

现在您可以执行您想要的操作。

【讨论】:

    【解决方案2】:
        NSMutableArray *controllers = [[self.navigationController.viewControllers mutableCopy] autorelease];
    
    ABCController *controller = [controllers objectAtIndex:2]; //ABCController is the name of conroller class
    [controller methodName] ;
    

    这种方法应该有效

    【讨论】:

      【解决方案3】:

      我建议创建一个基类,view1、view2、...view 5 将从中派生。基类将包含此方法,使其可供所有类(view1、view2、...)访问

      【讨论】:

        猜你喜欢
        • 2011-09-19
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多