Ios 具有多个选项卡的选项卡栏,仅使用一个视图控制器
我无法找到我的问题的答案,所以,如果某个地方已经有答案,请与我联系!我的问题似乎很常见-我在导航控制器中嵌入了一个tableview,我想要一个包含3项的选项卡栏,其中3项更改tableview以填充不同的数据,第一个选项卡表示加载视图时tableview中的默认数据Ios 具有多个选项卡的选项卡栏,仅使用一个视图控制器,ios,objective-c,uitabbarcontroller,uitabcontroller,Ios,Objective C,Uitabbarcontroller,Uitabcontroller,我无法找到我的问题的答案,所以,如果某个地方已经有答案,请与我联系!我的问题似乎很常见-我在导航控制器中嵌入了一个tableview,我想要一个包含3项的选项卡栏,其中3项更改tableview以填充不同的数据,第一个选项卡表示加载视图时tableview中的默认数据 但似乎没有必要为其他两个选项卡创建两个额外的UITableViewController类,因为我只需通过一个简单的[tableView reloadData]更改填充表的数据即可。你是如何做到这一点的,以及如何在故事板中实现这一点
但似乎没有必要为其他两个选项卡创建两个额外的UITableViewController类,因为我只需通过一个简单的
[tableView reloadData]
更改填充表的数据即可。你是如何做到这一点的,以及如何在故事板中实现这一点的 您可以重复使用同一类,并在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
。另一方面,uitabar
只是一个控制单元
将选项卡栏的委托设置为表视图控制器,并添加以下协议方法:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;
您可以在此方法中加载正确的数据。您可以通过以下方式获取所选项目(按钮)的索引:
听起来您真正想要的是一个带有分段控件的UITableViewController来更改视图。选项卡栏用于导航 使用UIControlEventValueChanged检测更改,加载新数据并重新加载视图
您没有指出“不同数据”的含义。如果您的意思是执行一些通过CoreData获取/谓词/排序等更新数据的操作,那么使用分段控件可能是一种方法。如果您的数据存在显著差异(不同的实体、不同的数据管理等),那么您可能应该使用单独的UITableViewController,因为您不应该尝试过度概括UITableViewController,而应该将数据与UITableViewController配对。毕竟,这就是它的用途。您可以像这样通过ctrl+drag将多个关系切换到一个控制器 您应该使用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
}
}
...
}
为什么要使用选项卡栏控制器来筛选表视图的数据?对不起,我不是指筛选,我是指更改!我的应用程序显示Facebook页面上的照片。相册有3个类别,我希望3个选项卡代表类别,而tableView显示类别中的相册。然后您需要三个视图控制器实例,但只有一个视图控制器类。只需将类别传递给类,以便视图控制器知道要显示哪些图像。您能给我一些代码示例吗?这并不理想。您正在强制视图控制器知道1)它位于选项卡控制器中,2)它的数据依赖于选定的选项卡。只需在视图控制器上设置一些属性,告诉它要使用哪个数据集,效果会好得多。这将使代码与特定布局的耦合性大大降低。你是对的@rmaddy这违反了关注分离这只是我的第一个想法,我将编辑它死链接-从2018年6月开始,尝试-或者,如果没有了,搜索术语
人机界面指南分段控件
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