0

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

花了大约 3 个小时后,我发现您无法更改 UIBackBarButtonItem 的视图,只能更改 UILeftBarButtonItem,所以如果我想实现自定义后退按钮,我会隐藏 UIBackButtonItem 并显示一个 UILeftBarButtonItem 来弹出。

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

有人能解释一下为什么苹果会这样做吗?

4

3 回答 3

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];   
}
于 2013-07-26T09:19:55.140 回答
0

我想我有一个全面的解决方案给你。

1) 根据经验,最好不要屈服于 BarButtonItems 的限制。我建议你创建一个简单的 UIButton,根据自己的喜好自定义它。可能会在其触摸事件中添加一个动作..使用自定义背景和标题颜色对其进行标记......等等..保留对这个按钮的引用,也许作为一个属性。

2) 然后,您使用 UIBarButtonItem 初始化程序 -initWithCustomView 创建 UIBarButtonItem 的实例,您将 UIButton 实例作为 init 中的此自定义视图潜入并完全控制它。

3)最后,您只需执行此操作。self.navigationItem.LeftBarButtonItems = @[ourUIBarButtonItem].

导航栏有一个数组属性“leftBarButtonItems”,用于一系列左侧按钮,以及用于右侧的 rightBarbuttonItems。只需将其替换为您自己的数组,包含 UIbarButtonItem、包含您的按钮以及您对按钮的引用。

现在您可以完全控制导航栏中正确的按钮。

笔记!- 一旦你提供了这样一个 leftBarButtonItem,库存的 Apple BackButton 就消失了。

于 2013-07-26T10:40:03.750 回答
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];
于 2013-07-26T09:12:10.873 回答