如何在不使用`Application:didFinishLaunchingWithOptions:`的情况下更改导航栏?

时间:2013-02-16 04:19:01

标签: objective-c uiimageview themes uinavigationbar appdelegate

我一直在使用以下代码更改所有观看次数的导航栏:

- (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 个答案:

答案 0 :(得分:2)

您不必在app delegate中设置主题;你可以在任何你想要的地方做到(你甚至可以让它互动)。您唯一需要注意的是,通过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];

答案 1 :(得分:0)

他们是否在更改Settings.app中的主题?只需将您的主题代码放在-applicationWillEnterForeground:的app appate ...