在UI视图中嵌入标签栏

时间:2015-08-04 09:45:44

标签: ios objective-c uitabbarcontroller uitabbar

我正在使用SplitView控制器。在我的DetailView中,我想实现与SplitView Controller

下面给出的图像类似的东西

在我的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");
}

}

但上述方法无效。如果我错过了什么,有人请指导我。

提前致谢!

3 个答案:

答案 0 :(得分:2)

有几种方法可以达到你想要的效果,但我不建议你使用TabBar来实现它。

  1. 您应该使用UISegmentedControl。您可能无法按照自己的方式对其进行精确处理,但它是实现所需功能的最简单方法。

  2. 使用3个不同的按钮,根据您的需要将它们放在您的内部。在这种情况下,您需要自己手动管理选择(显示一个和其他关闭),背景图像和其他细节。

  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)

您可以按照以下步骤实现上述图像功能:

  
      
  1. 使用三个或更多按钮进行UIVIEW(标题与按钮名称相同)。
  2.   
  3. 将标签值分别赋予每个按钮,分别为1,2和3
  4.   
  5. 制作IBOutlet以及UIButton的动作方法
  6.   
  7. 当用户按下按钮1(错误),然后使view1可见,否则view2和view3隐藏
  8.   
  9. 当用户按下按钮2(警告),然后使view2可见,否则view1和view3隐藏
  10.   
  11. 其他按钮也一样。
  12.   

如有任何疑问,请与我们联系。