我在SO上找不到解决我的问题的答案,请给我提供链接,如果已经有答案存在!我的问题似乎非常普遍 - 我在导航控制器中嵌入了一个表视图,并希望有一个带有3个选项卡的标签栏,在这3个选项卡中,第一个选项卡表示视图加载时表视图中的默认数据。
但是,当我可以通过简单的 [tableView reloadData]
更改填充表格的数据时,似乎没有必要为其他两个选项卡创建两个额外的UITableViewController类。您如何处理此问题?并且如何在故事板中实现它?
我在SO上找不到解决我的问题的答案,请给我提供链接,如果已经有答案存在!我的问题似乎非常普遍 - 我在导航控制器中嵌入了一个表视图,并希望有一个带有3个选项卡的标签栏,在这3个选项卡中,第一个选项卡表示视图加载时表视图中的默认数据。
但是,当我可以通过简单的 [tableView reloadData]
更改填充表格的数据时,似乎没有必要为其他两个选项卡创建两个额外的UITableViewController类。您如何处理此问题?并且如何在故事板中实现它?
听起来你真正想要的是一个带有分段控件的单个UITableViewController以更改视图。选项卡栏用于导航。
使用UIControlEventValueChanged来检测更改,加载新数据并重新加载视图。
你没有说明'不同的数据'是什么意思。如果你的意思是执行一些操作,通过CoreData获取/谓词/排序等更新数据,那么使用分段控制可能是正确的方法。如果你的数据差异很大(不同的实体,不同的数据管理等),那么你应该选择单独的UITableViewControllers,因为你不应该过度概括你的UITableViewController,而是将你的数据与UITableViewController配对。毕竟,这就是它的作用。
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
}
}
...
}
let tag = self.tabBarController?.tabBar.selectedItem!.tag
let selectedIndex = self.tabController?.selectedIndex
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;
}
}
UITabbar
添加到您的表视图控制器中。不要使用作为视图控制器容器的UITabbarViewController
。另一方面,UITabbar
只是一个控制单元。- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;
NSUInteger index = [tabBar.items indexOfObject:item];