UITabBarController 视图之间的共享控件

Posted

技术标签:

【中文标题】UITabBarController 视图之间的共享控件【英文标题】:Shared Controls between UITabBarController View 【发布时间】:2014-07-12 05:19:11 【问题描述】:

我目前正在开发我的第一个 ios 应用程序,目前进展顺利。但是现在我想开发一个功能,它更高级一点,我不知道如何进行。

我的应用使用Core DataTabBarController 在不同的NavigationControllers 之间切换。

现在我想在每个显示标签和两个按钮的导航控制器上实现一个子视图。标签是计时器的指示器,两个按钮应该启动和停止计时器,并在计时器停止时保存一点数据。这个子视图应该在选项卡之间是连续的,所以我想保留计时器和按钮的状态。

我的想法是创建一个 xib 并将这个 xib 加载到 TabBarController 本身上,但是我不知道如何实现。

【问题讨论】:

为什么所有导航控制器的视图都一样?有什么具体原因吗?对于解决方案,您可以创建一个视图控制器的单例实例并将其与所有导航控制器链接,但这实际上违背了标签栏控制器的目的。 如果我启动计时器,标签应该开始显示计时器,如果我想切换导航控制器,我希望仍然能够看到计时器的显示并能够启动和停止它。 您是否创建了标签栏控制器类?或全部从情节提要链接。 我在故事板中将所有内容链接在一起。 检查这个-***.com/questions/17748899/… 【参考方案1】:

我会在标签栏控制器的子类中创建计时器;无论如何,它有点像单例,并且应该在整个运行过程中都存在。如果你在那里创建一个属性,我称之为“计数器”,你可以在你的内容控制器中观察它来更新你的标签,

- (void)viewDidLoad 
    [super viewDidLoad];
    [self addObserver:self forKeyPath:@"self.tabBarController.counter" options:NSKeyValueObservingOptionNew context:nil];


-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
    NSString *s = [NSString stringWithFormat:@"%@",(NSNumber *)[change valueForKey:@"new"]];
    self.label.text = s;

您需要在标签栏控制器中有方法来启动和停止可以从内容控制器中的按钮调用的计时器。至于带有标签和按钮的视图,我不会尝试将其添加到标签栏控制器,而是将其添加到每个内容控制器中。如果您在故事板中设计视图,可以将其放在一个控制器中,然后复制并粘贴到需要它的任何其他控制器中。

【讨论】:

计时器的想法似乎很聪明,我明天试试。谢谢。

以上是关于UITabBarController 视图之间的共享控件的主要内容,如果未能解决你的问题,请参考以下文章

如何在由 UITabBarController 分隔的两个视图控制器之间传递数据?

在 UITabBarController 中的标签栏和导航视图之间添加 UIView

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

如何在两个由UITabBarController分隔的视图控制器之间传递数据?

UITabBarController导航控制器控制器关系

在 UITabBarController 中制作自定义 UITabBar 的正确方法