2012-03-23 67 views
1

我一直在将应用程序转换为使用故事板。我确信这是一个简单的问题,但不知怎的,我似乎无法弄清楚“正确的”做法,因为我们来自旧的XIB世界。使用故事板时在UITabBarController之间传递数据视图

其中的一个子部分包含一个UITabBarController,每个UITabBarController中都有一些子视图。

启动这组标签的操作完美无缺;我检测到segue,并在我的(自定义)UITabBarController中设置了一些数据属性。

接下来,我希望能够将这些数据传递给子视图创建时。但是 - 因为这些标签只是'关系'而不是塞格',所以我不能做我在其他地方做的事情,这是'prepareForSegue'函数的重写。

在旧的XIB Universe中,我只是将一些IBOutlet绑定在Tab控制器和子视图之间。但是我不能在故事板中这样做,因为父母和孩子是不同的“场景”。

我试图让我的UITabBarController类实现了自己的委托,覆盖“didSelectViewController”,做“self.delegate =自我”,这几乎作品,除了事实,它从未被称为与第一个选项卡时,该视图最初显示。

什么是“正确”(或“最好”)的方式来做到这一点?请不要告诉我在应用程序代理上获得/设置一些价值,因为这是“全局变量”领域 - 讨厌。

回答

1

尝试通过UITabBarController上的视图控制器进行循环,例如,在这个例子中,setData方法被从segue调用到UITabBarController,然后它通过子视图控制器循环,在子控制器上也进行类似的调用以设置数据;

- (void)setData:(MyDataClass *)newData 
{ 
    if (_myData != newData) { 
     _myData = newData; 

     // Update the view. 
     [self configureView]; 
    } 

} 

- (void) configureView { 
     for (UIViewController *v in self.viewControllers) 
     { 
      if ([v isKindOfClass:[MyDetailViewController class]]) 
      { 
       MyDetailViewController *myViewController = v; 
        [myViewController setData:myData]; 
      } 
     } 
} 
相关问题