Objective C / UIBackBarButtonItem为什么不能改变视图

时间:2013-07-26 09:06:50

标签: objective-c view uibarbuttonitem

我在搞乱一个项目时遇到了一个有趣而奇怪的问题。

花了3个小时之后,我发现你不能改变UIBackBarButtonItem的视图,只能更改UILeftBarButtonItem,所以如果我想实现一个自定义后退按钮,我隐藏UIBackButtonItem并显示一个UILeftBarButtonItem弹出。

现在我觉得很奇怪,你不能改变UIBackBarButtonItem的视图,但你可以改变UILeftBarButtonItem和UIRightBarButtonItem的视图。

有人可以解释一下Apple为什么会这样做?

3 个答案:

答案 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就不见了。