2012-08-01 63 views
1

所以我不得不承认,我有这个代码工作完美,直到一天前,当我添加一个新的视图,所以我现在很沮丧。故事板上的tabbar上的自定义背景

设置: 我有一个包含tabbar的storyboarded应用程序。在AppDelegate中,我有在AppDelegate中安装的CoreData

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    UINavigationController *navigationController = [[tabBarController viewControllers] objectAtIndex:0]; 
    GamesViewController *controller = [[navigationController viewControllers] objectAtIndex:0]; 
    controller.managedObjectContext = self.managedObjectContext; 

    return YES; 
} 

而且下面,我有这种方法,将标准的选项卡背景设置为我选择的图片:

- (void)customizeInterface {  
    UIImage* tabBarBackground = [UIImage imageNamed:@"tab_background"]; 
    [[UITabBar appearance] setBackgroundImage:tabBarBackground]; 
} 

所以这一切工作正常,直到我添加了另一个登录视图之前我的选项卡。我不得不改变CoreData最初的设置(从我的标签页到我的登录/初始化视图)。以下是故事板外观的新设置。

Here's the new setup in my storyboard

现在,当应用程序加载了...背景图像最初出现过,但在第一个选项卡上。一旦我点击关闭,它会再次切换到默认的渐变色。如果我回到第一个/初始选项卡,背景不会自行重新应用,它将保留为彩色渐变。

下面是修订后的applicationDidFinishLaunching代码与它一起去:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    //instantiate local context 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    if (!context) { 
     // Handle the error. 
     NSLog(@"Error: Context is null"); 
    } 

    LoginViewController *rootViewController = [LoginViewController alloc]; 
    rootViewController.managedObjectContext = context; 

    return YES; 
} 

,那么什么我试图做的,是进入viewDidLoad中的第一个VC,我的TabBar负载高达(GameViewController ),并试图将这一来解决这个问题:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self.tabBarController.tabBar setBackgroundImage:[UIImage imageNamed:@"dock_background"]]; 
} 

这并没有工作,所以我使用相同的原始代码,我在我的AppDelegate也尝试并且还没有工作:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UIImage* tabBarBackground = [UIImage imageNamed:@"tab_background"]; 
    [[UITabBar appearance] setBackgroundImage:tabBarBackground]; 
} 

所以......我有点卡住。我必须做(或不做)如此明显的事情......任何人都有任何提示/指针?

由于一吨 - 德鲁

+0

你想定制的TabBar – 2012-08-01 04:29:00

+0

哇。现在我看到编码的深夜效应有时可以做到。原来,答案始终在我面前。我的意见是试图加载图像“dock_background.png”而不是tab_background.png(这是实际的文件名)。由于该图像不存在...它默认为正常的渐变背景颜色。卫生署!感谢Neon的帮助......我将在未来的项目中记住您的代码,因为它看起来很有前途。 – Drew 2012-08-01 13:54:38

回答

0

Delegate.h文件

@interface AppDelegate中:UIResponder

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) UIImageView *imgV; 
@property (strong, nonatomic) UIViewController *viewController; 
@property (strong, nonatomic) UITabBarController *tabBarController; 

@end 

Delegate.m文件

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 

     self.viewController = [[DeskboardVctr alloc] initWithNibName:@"DeskboardVctr" bundle:nil]; 




    self.tabBarController = [[UITabBarController alloc] init]; 
    self.tabBarController.delegate=self; 
    self.imgV=[[UIImageView alloc] init]; 
    self.imgV.frame=CGRectMake(0, 0, 1024, 49); 
    [[self.tabBarController tabBar] insertSubview:self.imgV atIndex:1]; 
    self.tabBarController.delegate=self; 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

的TabBar的委托方法

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{ 
    NSUInteger index=[[tabBarController viewControllers] indexOfObject:viewController]; 
     switch (index) { 
      case 0: 
       self.imgV.image=[UIImage imageNamed:@"t1.png"]; 
       break; 
      case 1: 
       self.imgV.image=[UIImage imageNamed:@"t2.png"]; 
       break; 
      case 2: 
       self.imgV.image=[UIImage imageNamed:@"t3.png"]; 
       break; 
      case 3: 
       self.imgV.image=[UIImage imageNamed:@"t4.png"]; 
       break; 
      case 4: 
       self.imgV.image=[UIImage imageNamed:@"t5.png"]; 
       break; 
      default: 
       break; 
     } 
    return YES; 
} 

希望你可以帮助这个 感谢

+0

欲了解更多详情和示例,请访问参考链接http://bit.ly/NLv64P – 2012-08-01 04:55:53