Objective c XCode选项卡式应用程序赢得';不加载图标

Objective c XCode选项卡式应用程序赢得';不加载图标,objective-c,ios,cocoa-touch,Objective C,Ios,Cocoa Touch,我正在创建一个选项卡式应用程序,但在让图标显示在选项卡上时遇到了一些问题。我将我的代码与我在书中编写的前一个示例进行了比较,它似乎是匹配的,但新应用程序中的图标显示为空白方块。我已经尝试过在不包含所有细节的情况下包含所有相关代码,但是如果您想看到更多,请询问,我将根据需要编辑更多内容。我已经检查了ImageName:string和图标名称上的大小写是否相同 - (BOOL)application:(UIApplication *)application didFinishLaunchingWit

我正在创建一个选项卡式应用程序,但在让图标显示在选项卡上时遇到了一些问题。我将我的代码与我在书中编写的前一个示例进行了比较,它似乎是匹配的,但新应用程序中的图标显示为空白方块。我已经尝试过在不包含所有细节的情况下包含所有相关代码,但是如果您想看到更多,请询问,我将根据需要编辑更多内容。我已经检查了ImageName:string和图标名称上的大小写是否相同

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ... // initializers for ViewControllers 1-3, which are custom viewControllers
        // that have the tab properties set in (void)viewDidLoad
    globalUINavigationController = [[UINavigationController alloc] initWithNibName:
                                @"DemoTabbedFourthViewController" bundle:nil];
    globalUINavigationController.title = NSLocalizedString(@"Fourth", @"Fourth");
    globalUINavigationController.tabBarItem.image = [UIImage imageNamed:@"fourth.png"];

    UIViewController *viewController4 = [[DemoTabbedFourthViewController alloc] 
                    initWithNibName:@"DemoTabbedFourthViewController" bundle:nil];

    [globalUINavigationController pushViewController:viewController4 animated:YES];
    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2,
                                         viewController3, globalUINavigationController, nil];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
}

我使用globalUINavigationController作为我的示例,因为如果我能让它工作,我应该能够让其他人基于它工作。如果您对代码有任何问题或意见,请告诉我。我不熟悉Objective C和iPhone应用程序开发,我会尽我所能得到帮助。

这是因为图像太大,或者你的图标是方形的。我的意思是,XCode只会将您的图像作为一个掩码抓取(意味着颜色无关紧要)。它必须是PNG图像,大小约为30x30。从课堂参考

形象 项目的图像。如果为nil,则不显示图像。 选项卡栏上显示的图像源自此图像。如果此图像太大,无法放在选项卡栏上,则会将其剪裁以适合。选项卡栏图像的大小通常为30 x 30点。源图像中的alpha值用于创建未选定图像,而选定图像中的不透明值将被忽略


我认为问题在于您使用nib文件初始化UINavigationController。实际上我从来没有试过这个。您应该首先初始化ViewController,然后将其添加到NavigationController的init消息中。此外,您还必须在内容视图控制器上设置标题,而不是在导航控制器上,因为导航控制器要求其topViewController提供其应显示的标题

我还没有编译下面的代码,所以可能会缺少一些逗号或类似的东西,但它应该会让您了解我的意思

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ... // initializers for ViewControllers 1-3, which are custom viewControllers
        // that have the tab properties set in (void)viewDidLoad
    UIViewController *viewController4 = [[DemoTabbedFourthViewController alloc] 
                initWithNibName:@"DemoTabbedFourthViewController" bundle:nil];

    globalUINavigationController = [[UINavigationController alloc] initWithRootViewController:viewController4];
    globalUINavigationController.tabBarItem.image = [UIImage imageNamed:@"fourth.png"];

    [globalUINavigationController pushViewController:viewController4 animated:YES];
    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2,
                                     viewController3, globalUINavigationController, nil];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
}
如果这不能解决问题,可能是因为图标文件是常规图像。仅图像的alpha通道用于选项卡栏项目


//编辑:在这种情况下,看一看这个问题:

它们是PNG图像,这些图像是30x30(60x60用于视网膜显示图像,但这些图像的名称适当,即“fourth@2x.png"). 我真的不明白你所说的“方形图标”是什么意思,你能进一步解释一下吗?这些图标有透明度吗?是Illustrator中的一个例子。你是对的,我需要将它们制作成不同的图像类型。这篇文章有两个对我有用的示例图像。谢谢你的帮助!