0

我正在自定义我的 TabBar 图标,但我遇到了自定义选项卡图形在第一次单击时才显示的问题,但第一个选项卡除外。设置如下Entry->VC->Tab Controller->TabVC1->TabVC2->TabVC3->TabVC4->TabVC5。让它们在标签控制器的第一次初始化时出现的最佳方法是什么。

** 这些属性是在我进入选项卡控制器时设置的(它们工作正常)

// Set background to white for the tab bar
UIImage *tabBackground = [[UIImage imageNamed:@"tabback.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UITabBar appearance] setBackgroundImage:tabBackground];

// setting the selected color to blue
self.tabBar.tintColor = [UIColor blueColor];

// changing the tab bar text color
[[UITabBarItem appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor blackColor], UITextAttributeTextColor,[UIFont fontWithName:@"Copperplate-Bold" size:0.0], UITextAttributeFont, nil] forState:UIControlStateNormal];

** 这些是在单独的 TabVC 中设置的(它们仅在第一次单击其选项卡后显示)

// loading the custom icon for front and back
UITabBarItem *tabicon = [[UITabBarItem alloc] initWithTitle:@"Daily" image:[UIImage imageNamed:@"Day.png"] tag:0];
[tabicon setFinishedSelectedImage:[UIImage imageNamed:@"Day.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"Day.png"]];
[self setTabBarItem:tabicon];
4

2 回答 2

2

首先,您的标签栏控制器应该是您的根视图控制器。也就是你的窗口的rootViewController。从文档中:

部署选项卡栏界面时,您必须将此视图安装为窗口的根目录。与其他视图控制器不同,标签栏界面永远不应安装为另一个视图控制器的子级。

另外,因为你打电话给self.tabBar我感觉你是 UITabBarController 的子类。文档也对此提出了建议。

话虽如此,您可以在第一次外观设置(第一个代码片段)的任何地方设置标签栏项目。

例如,要更改您将执行的第二个视图控制器选项卡项

// loading the custom icon for front and back
UITabBarItem *tabicon = [[UITabBarItem alloc] initWithTitle:@"Daily" image:[UIImage imageNamed:@"Day.png"] tag:0];

[tabicon setFinishedSelectedImage:[UIImage imageNamed:@"Day.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"Day.png"]];

UIViewController *second =  [self.viewControllers objectAtIndex:1];
[second setTabBarItem:tabicon];

关键是您需要在标签栏视图出现之前设置自定义外观。

于 2013-01-05T14:24:32.973 回答
0

在您指定的 init 方法中设置自定义 tabBarItem。这样,它将在控制器初始化时设置,您不必等到它第一次显示才能看到您的自定义 tabBarItem。

例如,这里是 Swift 中的一个示例,控制器在情节提要中设置:

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    self.tabBarItem = getTabBarItem(NSLocalizedString("Calendar", comment: ""), UIImage(named: "851-calendar.png")!)
}

请注意,getTabBarItem() 是我的一个自定义函数,它返回一个 UITabBarItem。

于 2014-12-30T01:28:46.853 回答