来自关于 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 ;-)