后退按钮没有相应的颜色(目标c)

时间:2013-07-23 17:57:22

标签: ios objective-c uinavigationbar uiappearance

我目前正在开发具有多种导航栏颜色的iphone / ipad应用程序。在应用程序的一个部分中,导航栏必须是橙色,而另一部分则必须是紫色。在应用程序的开始屏幕上,隐藏了导航栏。

导航栏,后退按钮和小节按钮的颜色根据应用程序两个部分的segue标识符在prepareForSegue中设置。

UIImage *navBackgroundImage = [UIImage imageNamed:@"Navigation-Bar-Orange.png"];
[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];

//Change the appearance of back button
UIImage *backButtonImage = [[UIImage imageNamed:@"Back-Orange"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 6)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

//Change the appearance of standard navigation button
UIImage *barButtonImage = [[UIImage imageNamed:@"Standard-Orange"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)];
[[UIBarButtonItem appearance] setBackgroundImage:barButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                       [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor,
                                                       [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],UITextAttributeTextShadowColor,
                                                       [NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
                                                       UITextAttributeTextShadowOffset,
                                                       [UIFont fontWithName:@"Futura-CondensedMedium" size:21.0], UITextAttributeFont, nil]];

当切换到应用程序的其他部分(再次通过segue)时,导航栏和标准栏按钮将正确着色,但后退按钮将具有应用程序上一部分的颜色。我已尝试在应用程序中多次设置颜色(例如viewWillAppear和viewDidLoad),但问题仍然存在。

如何解决此问题并为应用程序的两个部分显示正确的按钮颜色?是否可能有另一种(更好的)方法来设置不同的导航栏颜色?

发生问题的视觉示例:

http://imgur.com/KgxKYOi,kJjC7Iv,wq2mAzf#0

2 个答案:

答案 0 :(得分:1)

你是对的。实际上,您在代码中为后退按钮设置的任何文本都会表现得相似。显示的后退按钮实际上从前一个视图控制器获取其设置。只需将设置转回一个。

答案 1 :(得分:0)

我通过创建一个新的UIBarButtonItem并将其添加到UINavigationBar来设置实际的backbarbutton。

UIBarButtonItem *barBtnItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:nil];
    [barBtnItem setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    self.navigationItem.backBarButtonItem = barBtnItem;

感谢您指导我朝着正确的方向Marcus。