在 TabBarController 上刷新 ViewController
Posted
技术标签:
【中文标题】在 TabBarController 上刷新 ViewController【英文标题】:Refresh ViewController on TabBarController 【发布时间】:2011-02-18 12:13:30 【问题描述】:我有一个 tabBarController,上面有三个 viewController。 当 viewController 1 被选中并且我做了一个 90 度时,我隐藏了 tabBar,我必须将当前视图添加到 tabBarController,否则 tabBar 所在的位置会出现一个空白区域。
如果现在我将 iPhone 旋转到之前的方向(垂直正常位置)我 removeFromSuperview 视图,但视图控制器上没有显示视图,我想应该显示原始视图(addsubview 调用之前的那个) ,事实上,如果我选择第二个 viewController,然后我回到 viewController 1,视图就会完美显示。
我不明白为什么会这样,你能帮帮我吗?
更新:
我认为问题在于我在 tabbarcontroller (self.view addSubview:vista_AS.view]) 上添加了一个视图,我需要这个来使 tabbar 不可见,后来,当我删除这个视图时,tabbarcontroller 会丢失一些viewcontroller 0 视图参考方式。我不明白的是,为什么当我更改为 viewcontroller 1 然后又回到 0 时,视图就可以了。有没有办法重新加载 viewcontroller 0 视图??
更新 2: 包含作者的代码,从建议的编辑到答案
这是我的代码:
if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
self.tabBar.hidden = TRUE;
vista_AS = [delegate.tabBarController.viewControllers objectAtIndex:0];
vista_AS.view.frame = CGRectMake(0, 0, 320, 480);
[self.view addSubview:vista_AS.view];
else
if ( (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) )
[vista_AS.view removeFromSuperview];
self.tabBar.hidden = FALSE;
【问题讨论】:
【参考方案1】:您的视图控制器 1 似乎正在被释放,要么是由于过度释放,要么是系统由于内存而被释放。发布一些代码,显示如何附加和删除覆盖标签栏的视图。这可能是答案。
【讨论】:
删除 vista_AS 时,实际上是删除了原始视图,因为它和 vista_AS 是相同的。如果要在隐藏标签栏空间后覆盖它,请添加 UIToolbar 或 UIView,如下所示: [tabBarController.view addSubview:myToolbar]; 这是我的主要问题,如何覆盖标签栏空间,但我不想添加 UIToolbar,我只想让视图填满整个屏幕。我做了 [tabBarController.view addSubview:vista] 但标签栏空间仍然出现。【参考方案2】:当您将vista_AS
添加为tabBarController
的子视图时,您会将vista_AS
的父视图更改为其最新的视图父视图,从而断开与tabBarController
的链接。
当您更改 iPhone 的方向时,您会从其超级视图中删除 vista_AS
,但 tabBarController
与您的视图之间的链接仍然断开。我相信这就是你看不到风景的原因。解决方案可能是通过将vista_AS
的父级重新分配给tabBarController.view
或执行[tabBarController.view addSubview:vista_AS]
。
【讨论】:
以上是关于在 TabBarController 上刷新 ViewController的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C:如何正确设置 TabBarController 的 didSelectViewController 方法,这样我每次点击时都可以刷新 VC