2017-05-16 75 views
1

我有2个独立的视图控制器在tabbar内的2个集合视图。我试图隐藏tabbar项目2,直到tabbar 1被加载。我们有什么办法隐藏某个标签栏项?最初,在viewWillAppear中我想隐藏的TabBar项。这里是我的代码:隐藏TabBar项目#2收藏后重新加载目标C

隐藏标签栏2

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    //HIDE TABBAR2 
} 

显示标签栏2

- (void)loadCollectionView 
{ 
    [self.collectionView reloadData]; 
    [self.collectionView performBatchUpdates:^{} 
            completion:^(BOOL finished) { 
             //Unhide TabBar 
            }]; 

} 
+0

您可以简单地启动w ith标签栏项目数组中的单个项目,并将第二个itm添加到arrach中,并使用更新后的数组调用“setItems”。 – lukya

回答

1

您需要删除该视图控制器从你的tabbar,你不能隐藏特定的tabbar项目!所以,你可以管理它一样,

NSMutableArray *viewControllersArr = [self.tabBarController.viewControllers mutableCopy]; 

[viewControllersArr removeObjectAtIndex:1]; 

[self.tabBarController setViewControllers:viewControllersArr animated:YES]; 

,当你得到你的收藏查看数据,或当你想显示第二个选项卡,然后就可以像

NSMutableArray *viewControllersArr = [self.tabBarController.viewControllers mutableCopy]; 

UIViewController *yourSeconVc = [self.storyboard instantiateViewControllerWithIdentifier:@"yourStoryboardIdentifier"]; // or whatever way your view controller is for second tab 

[viewControllersArr addObject:yourSeconVc]; 

[self.tabBarController setViewControllers:viewControllersArr animated:YES]; 
+0

您的回答很好!它几乎完成了这项工作。关于多次重新加载数据,我只有最小的问题,但我解决了它。非常感谢! – EdSniper

+0

不客气:) – Lion

+0

一个简单的问题,你如何在不重新初始化的情况下调用某个视图控制器? – EdSniper

1

子类UITabBarController(电话它例如MainTabController)。在界面构建器中,将标签栏控制器对象的类类型设置为类型MainTabController

MainTabController形成强大的属性来存储第二视图控制器(将要隐藏的一个):

@property (nonatomic, strong) UIViewController *secondTabVC; 

然后在viewDidLoad

// Store the second tab's VC for later 
self.secondTabVC = self.viewControllers[1]; 

// Hide the second tab's VC 
self.viewControllers = @[self.viewControllers[0]]; 

一旦数据已加载:

// Show the second tab's VC 
self.viewControllers = @[self.viewControllers[0], self.secondTabVC]; 
1

试试这个代码

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [_tabController setViewControllers:@[viewcontroller1,viewcontroller3]]; 

} 

在此处显示选项卡2

- (void)loadCollectionView 
{ 
[self.collectionView reloadData]; 
[self.collectionView performBatchUpdates:^{} 

completion:^(BOOL finished) 
{ 
    [_tabController setViewControllers:@[viewcontroller1,viewcontroller2,viewcontroller3]]; 
           }]; 
    }