我在搞乱一个项目时遇到了一个有趣而奇怪的问题。
花了3个小时之后,我发现你不能改变UIBackBarButtonItem的视图,只能更改UILeftBarButtonItem,所以如果我想实现一个自定义后退按钮,我隐藏UIBackButtonItem并显示一个UILeftBarButtonItem弹出。
现在我觉得很奇怪,你不能改变UIBackBarButtonItem的视图,但你可以改变UILeftBarButtonItem和UIRightBarButtonItem的视图。
有人可以解释一下Apple为什么会这样做?
答案 0 :(得分:0)
实际上,你可以。使用UIBarButtonItem
的实例方法setBackButtonBackgroundImage:forState:barMetrics:
。
因此,如果您想要更改所有后退按钮的背景图像,您的代码应该类似于:
UIImage *backButtonBgImageNormal = [[UIImage imageNamed:@"back_button_bg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 15, 5, 5);];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonBgImageNormal forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
答案 1 :(得分:0)
使用UINavigationController
的委托方法,例如
#pragma mark -
#pragma mark - UINavigationController Delegate Methods
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
//// customize you own stuff here;
UINavigationBar *morenavbar = navigationController.navigationBar;
UINavigationItem *morenavitem = morenavbar.topItem;
morenavitem.rightBarButtonItem.tintColor = [UIColor blackColor];
}
答案 2 :(得分:0)
我想我有一个全面的解决方案。
1)从经验来看,最好不要屈服于BarButtonItems的限制。我建议你创建一个简单的UIButton,根据自己的喜好自定义它。也许在它的触摸事件中添加一个动作..用自定义背景和标题颜色等标记它...等等。保留对此按钮的引用,可能作为属性。
2)然后,使用UIBarButtonItem初始化程序-initWithCustomView创建UIBarButtonItem实例,您可以在UIButton实例中作为此自定义视图潜入init并完全控制它。
3)最后,你就这样做了。 self.navigationItem.LeftBarButtonItems = @ [ourUIBarButtonItem]。
导航栏对于一系列左按钮具有Array属性“leftBarButtonItems”,对于右侧有一个rightBarbuttonItems。只需将此替换为您自己的数组,其中包含UIbarButtonItem,其中包含您的按钮,并且您可以引用您的按钮。
现在您可以完全控制导航栏中正确的按钮。
请注意! - 一旦你提供了这样一个leftBarButtonItem,股票Apple BackButton就不见了。