使用情节提要时使用 UITabBarController 在视图之间传递数据

Posted

技术标签:

【中文标题】使用情节提要时使用 UITabBarController 在视图之间传递数据【英文标题】:Passing data between views with a UITabBarController when using storyboards 【发布时间】:2012-03-23 12:00:17 【问题描述】:

我一直在将应用程序转换为使用情节提要。我确信这是一个简单的问题,但不知何故,我似乎无法找出“正确”的做法,因为我们来自旧的 XIB 世界。

其中一个小节包含一个 UITabBarController,每个小节中都有一些子视图。

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

接下来,我希望能够在创建子视图时将该数据传递给它们。但是 - 因为这些选项卡只是“关系”而不是 segue,所以我不能做我在其他地方所做的事情,即覆盖“prepareForSegue”功能。

在旧的 XIB 世界中,我只需在选项卡控制器和子视图之间将一些 IBOutlets 绑定在一起。但我不能在情节提要中这样做,因为父母和孩子是不同的“场景”。

我已经尝试让我的 UITabBarController 类实现它自己的委托,覆盖“didSelectViewController”并执行“self.delegate = self”,这几乎可以工作,除了它从未被调用过最初显示视图时的第一个选项卡。

执行此操作的“正确”(或“最佳”)方法是什么?请不要告诉我在应用程序委托上获取/设置一些值,因为这是“全局变量”领域 - 讨厌。

【问题讨论】:

【参考方案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];
           
       
 

【讨论】:

以上是关于使用情节提要时使用 UITabBarController 在视图之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章

为啥在使用情节提要时反复调用 AwakeFromNib?

使用情节提要时使用 UITabBarController 在视图之间传递数据

使用情节提要时我们会经常发生冲突吗?

为啥 XCode 4 在使用情节提要时不创建 XIB 文件?

使用情节提要设置标签文本时的短暂延迟

使用情节提要时如何使用摇动手势?