我正在使用SplitView控制器。在我的DetailView中,我想实现与
在我的DetailView控制器中,我将整个视图划分为3个子视图。在我的中间子视图中,我想实现一个标签栏,这样在按下这三个标签项(错误,警告和状态)时,应该加载一个不同的视图。
我已经尝试过搜索来实现它,但失败了。任何关于如何实现它的指南都将非常感激。
修改
我发现我可以使用委托方法获取我的标签项目的操作
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;
我通过以下方式在DetailViewController.m
内实现了上述方法:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
if (_myTabBar.selectedItem.tag == 1) {
NSLog(@"TAB 1");
}
else if (_myTabBar.selectedItem.tag == 2) {
NSLog(@"TAB2");
}
else if (_myTabBar.selectedItem.tag == 3)
{
NSLog(@"TAB3");
}
else
{
NSLog(@"TAB NOT WORKING");
}
}
但上述方法无效。如果我错过了什么,有人请指导我。
提前致谢!
答案 0 :(得分:2)
有几种方法可以达到你想要的效果,但我不建议你使用TabBar来实现它。
您应该使用UISegmentedControl。您可能无法按照自己的方式对其进行精确处理,但它是实现所需功能的最简单方法。
使用3个不同的按钮,根据您的需要将它们放在您的内部。在这种情况下,您需要自己手动管理选择(显示一个和其他关闭),背景图像和其他细节。
无论哪种方式,Tab Bar都不是正确的方法。希望这可以帮助。感谢。
答案 1 :(得分:1)
如果你真的想使用UITabBar
(但正如Gurtej建议的那样,UISegmentedControl
似乎更合适),这里有一个例子:
// This is to calculate the proper position of each UILabel in your middle view (you don't really care about it)
static CGFloat labelYCurrentPosition;
static CGFloat labelYFirstPosition;
static CGFloat xMargin = 5.f;
static CGFloat labelXPosition;
static CGFloat labelWidth = 120.f;
- (void)viewDidLoad {
[super viewDidLoad];
self.middleView = [[UIView alloc] initWithFrame:CGRectMake(0, 150.f, self.view.frame.size.width, 250.f)];
self.middleView.backgroundColor = [UIColor yellowColor];
[self.view addSubview:self.middleView];
UITabBar *tb = [[UITabBar alloc] initWithFrame:CGRectMake(0, 0, self.middleView.frame.size.width, 49)];
tb.backgroundColor = [UIColor greenColor];
UITabBarItem *tbi1 = [[UITabBarItem alloc] initWithTitle:@"Error" image:nil tag:0];
UITabBarItem *tbi2 = [[UITabBarItem alloc] initWithTitle:@"Warning" image:nil tag:1];
UITabBarItem *tbi3 = [[UITabBarItem alloc] initWithTitle:@"Status" image:nil tag:3];
[tb setItems:@[tbi1, tbi2, tbi3]];
[tb setDelegate:self]; // Delegate of your UITabBar is your detailViewController
[self.middleView addSubview:tb];
labelYFirstPosition = tb.center.y + tb.frame.size.height;
labelYCurrentPosition = labelYFirstPosition;
labelXPosition = xMargin;
}
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
CGFloat labelHeight = 20.f;
// This is to calculate x position of each label (you don't really care about it)
if (labelYCurrentPosition + labelHeight > self.middleView.frame.size.height){
labelXPosition += labelWidth;
labelYCurrentPosition = labelYFirstPosition;
}
UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(labelXPosition, labelYCurrentPosition, labelWidth - 2 * xMargin, labelHeight)];
lab.text = [NSString stringWithFormat:@"%@ with tag %ld", item.title, (long)item.tag];
lab.font = [UIFont systemFontOfSize:12.f];
[self.middleView addSubview:lab];
labelYCurrentPosition += labelHeight;
}
答案 2 :(得分:0)
您可以按照以下步骤实现上述图像功能:
- 使用三个或更多按钮进行UIVIEW(标题与按钮名称相同)。
- 将标签值分别赋予每个按钮,分别为1,2和3
- 制作IBOutlet以及UIButton的动作方法
- 当用户按下按钮1(错误),然后使view1可见,否则view2和view3隐藏
- 当用户按下按钮2(警告),然后使view2可见,否则view1和view3隐藏
- 其他按钮也一样。
醇>
如有任何疑问,请与我们联系。