English 中文(简体)
iOS 5: 如何执行自定义(图像)后键
原标题:iOS 5: How to implement a custom (image) back button

我在我的博客上做了辅导,所以我知道如何做一个可伸展的按钮,以显示下(堆叠)查看控制器的标题。但我所希望做的是图标(如 HINA 的家),没有文字,没有调整大小。

使用我自定义的图像和下面的代码,我得到一个延伸版(不想要),标题在顶部(不想要)上方(不想要),而且当点击时会亮亮/亮(良好);

UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

< a href=>"https://i.sstatic.net/dRKNS.jpg" rel="没有跟随 nofollow noreferrer" > 屏幕片 1

现在,我搜索了这里,阅读了所有类似的问题 这些问题都回回了旧的答案, 并给我带来了奇怪的结果。这是我尝试过的代码;

  UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"];
  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStyleBordered target:nil action:nil];
  self.navigationItem.backBarButtonItem = backButton;

此方法不伸展我的自定义图像按钮( 是好的), 也不显示文字( 我想要的), 但是它下仍然有原始的蓝色按钮( WTF), 我的自定义按钮单击时不留声, 只有它下的蓝色按钮才会这样做!

< a href=>"https://i.sstatic.net/q6Oyb.jpg" rel="没有跟随 nofollow noreferrer" > 屏幕 2

帮帮忙,我错过什么了?

* 过时

我用一个可变图像来修补它。 这迫使它不伸展

UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

为了修正我必须做的按钮上的标题显示

self.title =@" ";

现在,这是一个有点肮脏的修补方法,但它似乎在起作用。现在剩下的唯一问题是,我要在不同的视图上有一个不同的后退按钮,而这个方法正在引起一些麻烦;最后一个视图将按钮设置为覆盖所有其他视图。因此,最后,根据您如何在应用程序中浏览,回到一个先前的视图时,有一个错误的后退按钮,而它从未重新显示为正确的。


UPDATE 2: POTENTIAL IDEA:

下述是合理的解决办法,还是有可能破坏某种东西的黑客?

隐藏默认后退按钮,像这样,

[self.navigationItem setHidesBackButton:YES animated:NO];

...然后使用自定义的UIBarButtonItem, 并按我实际想要的放在后按钮位置上的风格按钮, 发送一个 < a href="https:// developler.apple.com/library/ios/#documentation/UIKit/Reference/UINAvigation Contractor_Class/Reference/Reference.html#/apple_ref/doc/uid/TP40006934" rel=“nofollown noreferrer" >poopView Consultractor Aimated: 给导航控制员的讯息, 当点击时 。

如果你知道一个更稳健的解决方案 请分享 谢谢

最佳回答

假设你目前的解决方案

UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

您可以接受, 因此唯一剩下的问题是 当您在视图之间往返时如何更新按钮外观, 一种可能有效的方法是在您每个控制器 viewWillAppear: 方法中执行上面的代码 :

- (void)viewWillAppear:(BOOL)animated {
    UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
}

如果您对当前使用自定义 UIBarbuttonTround 的方法不满意, 前进的方法就是以 init withoutCustomView: 初始化您的条形按钮项。 在这种情况下, 您可以指定一个您喜欢的图像为 UIImageView , 它应该有效 :

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:[UIImageView ...]];

希望这能帮上忙

问题回答

iOS 5+ 使用 < code> [[UIBBButton项目外观] 设置为 Backbutton Backflorimimage: [用户图像名称: @ “ someimage.png”,用于国家:用户界面控制状态热气管:UIBarMetricsDefault] 。

我在一个工程中使用的一些代码 :

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *btnImg = [UIImage imageNamed:@"ButtonRetourInactive"];
[btn setImage:btnImg forState:UIControlStateNormal];

btn.frame = CGRectMake(0, 0, btnImg.size.width, btnImg.size.height);
[btn addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:btn] autorelease];

注意,这是对 iOS 4 和 3 的工程。

如果您正在使用故事板, 它太容易 。 取一个圆形矩形按钮并将其放在导航栏上 。 然后双击按钮( 首先, 它只是显示 bar 按钮的属性 ), 但是通过两次选择, 您可以更改它的所有属性, 就像您正在自定义一个常规 UI 按钮一样 。

UIAppearance 在这种情况下没有用处。

I tried to use: - [UIBarButtonItem initWithCustomView:]. The view here you can add your background image and title, whatever you want.





相关问题
List Contents of Directory in a UITableView

I am trying to list the contents of Ringtones directory in a TableView, however, I am only getting the last file in the directory in ALL cells, instead of file per cell. This is my code: - (...

iPhone NSUserDefaults persistance difficulty

In my app i have a bunch of data i store in the NSUserdefaults. This information consists of an NSObject (Object1) with NSStrings and NSNumbers and also 2 instances of yet another object (Object2). ...

Writing a masked image to disk as a PNG file

Basically I m downloading images off of a webserver and then caching them to the disk, but before I do so I want to mask them. I m using the masking code everyone seems to point at which can be found ...

Resize UIImage with aspect ratio?

I m using this code to resize an image on the iPhone: CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0); UIGraphicsBeginImageContext(screenRect.size); [value drawInRect:screenRect blendMode:...

Allowing interaction with a UIView under another UIView

Is there a simple way of allowing interaction with a button in a UIView that lies under another UIView - where there are no actual objects from the top UIView on top of the button? For instance, ...

热门标签