如何调整此库以使用故事板?

时间:2012-08-28 10:57:10

标签: objective-c ios cocoa-touch storyboard xib

我找到了一个我想使用的标签栏库,但需要在我的应用程序中使用故事板。

一旦看到这个库与xibs一起工作,我就会自己调整它以适应我的故事板应用程序。但是,我无法使其发挥作用。

可在此处找到该库:http://www.cocoacontrols.com/controls/tbtabbar

那么我如何调整库以使其与故事板一起使用,如果无法完成,我如何在主窗口内使用uinavigationcontroller,因为我无法使用它。< / p>

由于

编辑:这是交换视图控制器的代码:

 -(void)switchViewController:(UIViewController *)viewController {
UIView *currentView = [self.view viewWithTag:SELECTED_VIEW_CONTROLLER_TAG];
[currentView removeFromSuperview];

viewController.view.frame = CGRectMake(0,0,self.view.bounds.size.width, self.view.bounds.size.height-(tabBar.frame.size.height));

viewController.view.tag = SELECTED_VIEW_CONTROLLER_TAG;

[self.view insertSubview:viewController.view belowSubview:tabBar];
}

1 个答案:

答案 0 :(得分:1)

我完全重写了我的答案并创建了一个示例项目,以确保我第二次没有错过任何内容。

您应该能够在TBViewController的storyboard子类中创建所有视图控制器(带有标识符)。这可以通过单击您的UIViewController,转到身份检查器(cmd alt 3)然后键入“TBViewController”来完成。如果一切正常,它应该自动完成。下一步是为选项卡控制器创建选项卡。每个选项卡在添加到TBTabBar控制器之前需要3个值。

  1. 普通图像
  2. 突出显示的图像
  3. 查看与按钮相关联的控制器
  4. 下面是我创建的一个自定义方法,用于帮助实例化这些TBTabButton对象,这些对象接受所有三个要求作为参数:

    -(TBTabButton*)TBTabButtonWithStoryBoardID:(NSString*)identifier andButtonImageNamed:(NSString*)normalImageTitle andHighlightedImageNamed:(NSString*)highlightImageTitle{
    
         //Create the tab bar and assign normal image
         TBTabButton *tabBarButtonItem = [[TBTabButton alloc] initWithIcon:[UIImage imageNamed:normalImageTitle]];
    
         //Assign Highlighted image
         tabBarButtonItem.highlightedIcon = [UIImage imageNamed:highlightImageTitle];
    
         //Fetch the subclassed view controller from storyboard and assign as viewController
         tabBarButtonItem.viewController = [self TBViewControllerFromStoryboardWithIdentifier:identifier];
    
         return tabBarButtonItem;
    }
    

    可以使用下一个代码块中的方法从故事板中检索视图控制器。

    -(TBViewController*)TBViewControllerFromStoryboardWithIdentifier:(NSString*)identifier{
    
        //instantiateViewControllerWithIdentifier returns a UIViewController Object
        UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:identifier];
    
        //check if UIViewController is a subclassed TBViewController
        if([viewController isKindOfClass:[TBViewController class]]){
    
            //if it is then send it back as the correct type
            return (TBViewController*)viewController;
        }
        return nil;
    }
    

    现在您有了一个方法,可以为您“准备添加”TBTabButton对象创建。使用此方法为标签栏创建每个所需按钮。一旦实例化了这些实例,就必须将它们添加到NSArray中,以便它可以作为创建TBTabBar对象的参数传递。剩下的就是将UITabBar对象添加到视图中并将其设置为基于默认值显示。

    -(void)setTBTabBar{
    
        //Instantiate your tab TBTabButtons
    
        TBTabButton *tab1 = [self TBTabButtonWithStoryBoardID:@"tab1"
                                  andButtonImageNamed:@"favoritesIcon.png"
                                   andHighlightedImageNamed:@"favoritesIconHighlighted.png"];
    
        TBTabButton *tab2 = [self TBTabButtonWithStoryBoardID:@"tab2"
                                  andButtonImageNamed:@"mentionsIcon.png"
                                  andHighlightedImageNamed:@"mentionsIconHighlighted.png"];
    
        TBTabButton *tab3 = [self TBTabButtonWithStoryBoardID:@"tab3"
                                  andButtonImageNamed:@"messagesIcon.png"
                                  andHighlightedImageNamed:@"messagesIconHighlighted.png"];
    
    
        //Add them to an array
        NSArray *arrayOfTBViewControllers = [NSArray arrayWithObjects: tab1, tab2, tab3, nil];
    
        //Instantiate your TBTabBar object with your array of TabButtons. Set this view as delegate
        tabBar = [[TBTabBar alloc] initWithItems:arrayOfTBViewControllers];
        tabBar.delegate = self;
    
        //Add it to the view and set it to show defaults
        [self.view addSubview:tabBar];
        [tabBar showDefaults];
    }
    

    必须在 - (void)viewDidLoad方法中调用此方法;

    只有其他需要做的事情是:

    1. 在_prefix.pch文件中定义SELECTED_VIEW_CONTROLLER_TAG 98456345
    2. 通过在已编译的来源下添加“-fno-objc-arc”标志来关闭导入文件的ARC
    3. 希望这可以解决您遇到的任何问题。这似乎是一件可能有点令人困惑的事情。只要你正确地遵循README中的其他步骤,我相信这对你来说应该是花花公子。

      如果这不起作用,请告诉我,我可以尝试发布我为上面的代码所做的工作示例的链接。