【问题标题】:xcode tab controller with customized graphics that won't load until first clicked带有自定义图形的 xcode 选项卡控制器,在第一次单击之前不会加载
【发布时间】:2013-01-05 13:21:57
【问题描述】:

我正在自定义我的 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];

【问题讨论】:

  • “加载自定义图标”代码在什么方法中?
  • -(void)viewDidLoad TabVC 类。

标签: ios xcode uitabbarcontroller customization


【解决方案1】:

首先你的标签栏控制器应该是你的根视图控制器。也就是你的窗口的rootViewController。 来自documentation

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

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

话虽如此,您可以在第一次外观设置时设置标签栏项目(第一个代码 sn-p)。

例如,要更改第二个视图控制器选项卡项,您会这样做

// 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];

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

【讨论】:

  • 成功了,感谢您的回答!实际上顺序是 Title Screen->Profile Selection Screen->Tab Controller->TabVC1->etc。在这种情况下,我如何将 Tab Controller 设为我的根视图控制器?
  • 以模态方式显示初始内容是一个很好的技巧。例如,在 VC1 的 viewDidAppear 中,您可以从 nib 或故事板实例化您的第一个屏幕,然后执行以下操作:[self presentViewController:theViewController animated:NO completion:nil]。它将显示为第一次显示的那样。完成后,关闭模式视图,然后返回标签栏视图。
  • 好的,好建议!!我应该将通常在应用程序委托中的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中的[self.window makeKeyAndVisible]; 放在哪里?否则,在模态加载另一个屏幕之前,您不会短暂看到标签栏吗?
  • 我不认为你会在不使用动画的情况下短暂看到它。问题是在加载视图层次结构之前您无法显示它,所以我认为您将不得不等待viewDidAppear 被调用。但是您可以尝试提前加载它,看看结果可能是什么。祝你好运!
【解决方案2】:

在您指定的 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。

【讨论】:

    猜你喜欢
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多