0

我正在使用 iOS 5.1,我需要为我的应用创建一个自定义 TabBar。当应用程序启动时,控件将被推送到自定义 TabbBar 控制器类。这就是我正在做的事情。我创建了从 UITabBarController 派生的类,并且我也使用了 XIB。在 XIB 中,我可以看到包含选项卡栏的 UIView Objetc,当我在该选项卡栏中添加更多选项卡时,当我运行应用程序时它没有反映,我只能看到一个黑色选项卡,没有任何标题和颜色。我记得早些时候我们使用 MainWindow.xib 添加 TabBarController 并为每个 TabBar 项添加导航控制器,以便每个选项卡都有自己的导航控制器,但是如果我使用了从UiTabBarController 类。如果我不清楚,请告诉我。我将给出更多说明。我只想知道为什么 XIB 的 TabBar 上的更改没有反映在应用程序中?

在此处输入图像描述

在此处输入图像描述

下图显示了 XIB 和 App,因此您可以看到我在 UITabBar 中添加了四个选项卡,但在应用程序中只有一个黑条。

4

1 回答 1

0

来自关于 UITabBarController 的 Apple 文档: 此类不用于子类化。相反,您按原样使用它的实例来呈现一个界面,允许用户在不同的操作模式之间进行选择

你不能继承它。如果原来的 UITabBarController 没有你想要的功能,你唯一的选择是创建一个新的自定义标签栏控制器而不继承原来的。

编辑:不确定你是否想这样做。您只是想从笔尖加载 UITabBarController 吗?如果是这样,则不需要子类化。使用故事板会更好;-) 但即使使用笔尖也可以做到。你必须简单地这样做:

1-在项目中添加一个空的xib并将其命名为TabBar(只有xib。没有源文件)

2-在该笔尖内放置一个 UITabBarController。没有其他组件,只有那个 UITabBarController

3-将此代码放入 AppDelegate 应用程序的 didFinishLaunchingWithOptions 方法中:

// this code should be already in that method if you have used the empty application model
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// this is the new code to add. You are programmatically loading an instance of UITabBarController from the nib named TabBar.xib
UITabBarController *tb = (UITabBarController *)[[[NSBundle mainBundle]loadNibNamed:@"TabBar" owner:self options:nil] objectAtIndex:0];
// here you are assigning the tb as the root viewcontroller
self.window.rootViewController = tb;

// this code is standard in this method
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;

然后您可以自定义您的 UITabBarController 并且它应该正确加载。注意:如果在笔尖内添加其他对象,则必须更改行

UITabBarController *tb = (UITabBarController *)[[[NSBundle mainBundle]loadNibNamed:@"TabBar" owner:self options:nil] objectAtIndex:0];

有一个循环和一些检查,看看你是否真的在加载 UITabBarController 而不是其他组件。现在我只是在笔尖中加载第一个对象,而不注意它是 UITabBarController 还是 UIPototo ;-)

于 2012-11-04T20:03:12.567 回答