iOS 5:如何实现自定义(图像)后退button
我已经在我的博客上完成了教程,所以我知道如何制作可展示底部(堆栈)视图控制器标题的可拉伸button。 但我希望做的是有图标(如家的房子),没有文字,不resize。
使用我的自定义图像和下面的代码,我得到了一个拉伸的版本(不需要),标题顶部(不想),它点击时是色调/高亮(是好的);
UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"]; [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
屏幕截图1
现在,我已经在这里search,并阅读所有类似的问题,回到旧的答案,对我来说有奇怪的结果。 这是我尝试的代码;
UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"]; UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStyleBordered target:nil action:nil]; self.navigationItem.backBarButtonItem = backButton;
这种方法不伸展我的自定义图像button(是好的),也没有显示文字(我想要的),但仍然是原来的蓝色button(跆拳道),和我的自定义button不点击时点击,只有它下面的蓝色button!
屏幕截图2
请帮忙,我错过了什么?
*更新
我已经通过使用可resize的图像来修复它了。 这迫使它不能'伸展'
UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
要解决显示在button上的标题,我必须做的
self.title =@" ";
现在这是一个肮脏的修复,但它似乎工作。 现在剩下的唯一问题是我想在不同的视图上使用不同的后退button,而这种方法会造成一些麻烦。 设置button的最后一个视图覆盖所有其他视图。 所以最后,根据你如何浏览应用程序,回到以前的视图有错误的后退button,它不会重置到正确的。
更新2:潜在的想法:
以下是一个合理的解决scheme,或者是一个破解可能会破坏的东西吗?
像隐藏默认的后退button,
[self.navigationItem setHidesBackButton:YES animated:NO];
…然后使用一个自定义的UIBarButtonItem,其中一个button的样式实际上是放置在后退button的位置,当点击时发送一个popViewControllerAnimated:消息到UINavigationController。
如果你知道更强大的解决scheme,请分享,谢谢。
假设你现在的解决scheme
UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
是你可以接受的,所以唯一的问题是如何在你的视图之间来回更新这个buttonappeareance,一个可以工作的方法是在你的每个控制器的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]; }
如果您对使用自定义UIBarButtonItem
当前方法UIBarButtonItem
,则需要使用initWithCustomView:
来初始化您的barbutton项目。 在这种情况下,你可以指定,例如,一个UIImageView
你喜欢的图像,它应该工作:
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:[UIImageView ...]];
希望这可以帮助。
对于iOS 5+使用[[UIBarButtonItem appearance] setBackButtonBackgroundImage:[UIImage imageNamed:@"someimage.png"] forState:UIControlStateNormal barMetrics: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。
如果你正在使用故事板,它太容易了。 采取一个圆形的矩形button,并将其放置在导航栏上。 然后双击button(在select时,首先,它只显示栏button的属性,但通过select两次,你可以改变它的所有属性,就像你自定义一个常规的UIbutton)。
UIAppearance
在这种情况下是没有用的。
我试着用: - [UIBarButtonItem initWithCustomView:]
。 这里的视图可以添加你的背景图片和标题,无论你想要什么。
- 如何使用CNContactVCardSerialization dataWithContacts:方法获取VCF数据与联系人图像?
- 如何为多个标签设置相同的字体比例,具体取决于哪一个是自动收缩?
- ARKit中的变换中的不同列表示什么?
- 奥尔克斯(Olx):11个不可思议的犯罪分子和反叛者。
- 在UITabBar项目下添加gifanimation
- 单元测试—具有Nimble + Snapshot的UIView
- 我想能够使用故事板向左和向右滚动UITableViewCell。 这不可能吗?
- 我可以在UILabel中使用Tally标记字体吗?
- CALayer – 放置在storyboard UIButton下面的子图层?