2013-02-16 107 views
0

我一直在使用下面的代码来改变我的全部意见的导航栏:如何在不使用`Application:didFinishLaunchingWithOptions:`的情况下更改导航栏?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

UIImage *gradientImage44 = [[UIImage imageNamed:@"clear_navigation_bar_texture_44"] 
          resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
[[UINavigationBar appearance] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault]; 
} 

,但我现在想的导航栏可以切换到不同的图像,用户选择基于“主题'他们想要的应用程序。问题是,我不能把代码放在这里,因为它只会在应用程序加载时才起作用。所以,我想让代码成为一个独立的方法,并在didFinishLaunching ...方法中调用它,并在用户更改“主题”时调用viewController方法。那么我的问题是,我将如何做到这一点,还是有更好的方法呢?

谢谢!

回答

2

您不必在应用程序委托中设置主题;你可以在任何你想要的地方做到这一点(你甚至可以使它交互)。唯一需要注意的是通过UIAppearance设置的属性只能用新视图实例化。如果您有现有需要更新的视图,则需要手动执行此操作。例如:

UIImage *gradientImage44 = [[UIImage imageNamed:@"clear_navigation_bar_texture_44"] resizableImageWithCapInsets:UIEdgeInsetsZero]; 
[[UINavigationBar appearance] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault]; 
[[self navigationController] navigationBar] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault]; 
0

它们是否改变了Settings.app中的主题?只需在-applicationWillEnterForeground:中将您的主题代码放入您的应用程序代理中即可...

+0

此外,我相信这可能会打破宽屏模式,因为导航栏在那里更短。可能不明显。 – nielsbot 2013-02-16 04:25:00

相关问题