如何重绘标签栏控制器显示的视图

Posted

技术标签:

【中文标题】如何重绘标签栏控制器显示的视图【英文标题】:How to redraw the view shown by a Tab Bar Controller 【发布时间】:2012-06-23 22:52:30 【问题描述】:

我在拆分视图控制器的主视图中有一个标签栏控制器。我向该标签栏控制器添加了一个子视图以显示一些信息。我不使用模态视图,因为我不想要模态行为,我需要该子视图显示在主视图中。

此信息视图的显示可能由其他几个视图控制器中的任何一个触发,具体取决于当时显示的内容。 (例如,点击地图上显示按钮列表中的单元格。)

有时,当我关闭此信息子视图时,标签栏控制器显示的视图是空白的。它通常是纯色的或白色的。我可以切换标签,当我回到我所在的标签时,视图被正确绘制。

我想尝试在视图上使用 setNeedsDisplay 方法,所以我在我的标签栏控制器类中尝试了这个:

- (void) redrawCurrentTab 
    UIView *currentView = [[self.viewControllers objectAtIndex:self.selectedIndex] view];
    [currentView setNeedsDisplay];

我检查了 currentView 的值对于应该显示的视图是否正确。但是视图并没有像我希望的那样被重绘。

所以我可以看到两个问题:

    我可能不明白 setNeedsDisplay 的工作原理。 我正在寻找一种更好的方法来完成信息视图的显示,而不是作为标签栏控制器的子视图。

【问题讨论】:

【参考方案1】:
// This is a hack, because the current tab is disappearing when the details view is withdrawn.
// So it needs to cycle to another view and then back.
- (void) redrawCurrentTab 
    if (currentIndex == 0) 
        self.selectedIndex = 1;
    else
        self.selectedIndex = 0;
    self.selectedIndex = currentIndex;

currentIndex在委托方法tabBarController:didSelectViewController:中设置

【讨论】:

以上是关于如何重绘标签栏控制器显示的视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在1项标签栏控制器中制作顶部标签栏以在swift中显示多个视图控制器?

如何在视图控制器中的标签栏和导航栏上全屏显示弹出视图?

如何在标签栏视图控制器中显示后退按钮?

从标签栏控制器模态显示视图

如何从标签栏控制器弹出或模态显示视图控制器?

如何让自定义标签栏显示标签栏项目在 Xcode 中设置的选定图像?