仅使用一个视图控制器的多个选项卡的选项卡栏

时间:2014-07-21 17:54:31

标签: ios objective-c uitabbarcontroller uitabcontroller

我无法在SO上找到问题的答案,如果答案已存在,请与我联系!我的问题似乎很常见 - 我在导航控制器中嵌入了一个tableview,我想要一个包含3个项目的标签栏,其中3个项目更改tableview以填充不同的数据,第一个选项卡表示tableview中的默认数据已加载。

但是,当我只使用一个简单的[tableView reloadData]来改变填充表的数据时,似乎没有必要为其他两个选项卡创建两个额外的UITableViewController类。你如何做到这一点,以及如何在故事板中实现这一点?

4 个答案:

答案 0 :(得分:3)

听起来你真正想要的是一个带有分段控制的UITableViewController来改变视图.Tab Bars用于导航

Segmented Control

使用UIControlEventValueChanged检测更改,加载新数据并重新加载视图。

您没有说明“不同数据”的含义。如果您的意思是执行一些通过CoreData fetch / predicate / sort等更新数据的操作,那么使用Segmented Control可能就是这样。如果您的数据有很大的不同(不同的实体,不同的数据管理等),那么您应该使用单独的UITableViewControllers,因为您不应该尝试过度概括UITableViewController,而是将数据与UITableViewController配对。毕竟,这就是它的用途。

答案 1 :(得分:1)

您可以做的是重复使用相同的类,并检查viewDidLoad方法以确定如何填充tableView,例如:

- (void)viewDidLoad{
    //itemType is a property you set 
    //when instantiating the controller
    int index = self.itemType; 

    switch (index) {
        case 0:
            [self populateTab1];
            break;
        case 1:
            [self populateTab2];
            break;
        case 2:
            [self populateTab3];
            break;
        default:
            break;
    }


}

答案 2 :(得分:1)

在storyboard中,将UITabbar添加到表视图控制器中。不要使用UITabbarViewController作为视图控制器的容器。另一方面,UITabbar只是一个控制单元。

将选项卡栏的委托设置为表视图控制器,并添加以下协议方法:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;

您可以在此方法中加载正确的数据。您可以通过

获取所选项目(按钮)的索引
NSUInteger index = [tabBar.items indexOfObject:item];

答案 3 :(得分:1)

您可以使用ctrl + drag这样将多个关系转换为一个控制器。

storyboard> 5 times ctrl+drag to one Navigation Controller

你应该让CustomTabBarController.swift来修改标签。 不要忘记更改在故事板中绘制的TabBarController的类名。

class CustomTabBarController: UITabBarController {
    let MENUS = ["tab1", "tab2", "tab3", "tab4", "tab5"]

    override func viewDidLoad() {
        super.viewDidLoad()

        let items = tabBar.items!

        for (var idx=0; idx<items.count; idx++) {
            items[idx].title = MENUS[idx]
            items[idx].tag = idx
        }
    }
...
}

您可以在ViewController.swift

上使用标签或选定的标签索引
let tag = self.tabBarController?.tabBar.selectedItem!.tag

let selectedIndex = self.tabController?.selectedIndex