实现没有私有API的自定义UITabBarController

时间:2013-03-04 12:42:45

标签: iphone ios objective-c cocoa-touch uitabbarcontroller

在StackOverflow上搜索了几个问题后,我发现创建自定义UITabBar只有一个主要项目叫BCTabBarController。对它的描述说:

  

使用标准UITabBarController有几个问题   包括:

     

太高了,特别是在横向模式下

     

高度与UIToolbar

不匹配      

如果不使用私有API

,则无法自定义

尽管如此,我发现this strange project on GitHub tutorial hereUITabBarController在其实施中使用标准UIButtons,每个标签UITabBarController并且它正常工作(奇怪的是,但它一样)。

我想知道,如果使用UIButtons创建自定义- (void)viewDidAppear:(BOOL)animated { [super viewWillAppear:animated]; [self hideTabBar]; [self addCustomElements]; } - (void)hideTabBar { for(UIView *view in self.view.subviews) { if([view isKindOfClass:[UITabBar class]]) { view.hidden = YES; break; } } } -(void)addCustomElements { // Initialise our two images UIImage *btnImage = [UIImage imageNamed:@"NavBar_01.png"]; UIImage *btnImageSelected = [UIImage imageNamed:@"NavBar_01_s.png"]; self.btn1 = [UIButton buttonWithType:UIButtonTypeCustom]; //Setup the button btn1.frame = CGRectMake(0, 430, 80, 50); // Set the frame (size and position) of the button) [btn1 setBackgroundImage:btnImage forState:UIControlStateNormal]; // Set the image for the normal state of the button [btn1 setBackgroundImage:btnImageSelected forState:UIControlStateSelected]; // Set the image for the selected state of the button btn1.backgroundColor = [UIColor yellowColor]; [btn1 setTag:0]; // Assign the button a "tag" so when our "click" event is called we know which button was pressed. [btn1 setSelected:true]; // Set this button as selected (we will select the others to false as we only want Tab 1 to be selected initially 而不是制表符是错误的,会导致什么结果?这样做的实现如下:

{{1}}

在我的项目中,我将使用iOS 5.1及更高版本,而不使用Storyboard或XIB。谢谢!

1 个答案:

答案 0 :(得分:1)

从iOS 5.0开始,使用屏幕底部的UITabBarController行创建自己的UIButtons不再是一个问题。

在以前版本的iOS SDK中,由于您必须自行管理viewWill/viewDid方法的转发,因此存在风险。

查看UIViewController类参考,实施容器视图控制器部分,您将在那里找到所需的全部内容:UIViewController Class Reference

还有一篇专题文章准确解释了您的需求:Creating Custom Container View Controllers

希望这会有所帮助,