7

我正在尝试创建一个自定义 UIBarbuttonItem,它只使用具有透明度的 png,以便我只有一个图标作为按钮。当我尝试设置按钮图像时,将背景设置为白色,并将样式设置为普通,我仍然会在它周围得到一个内部阴影和黑色边框。

是什么赋予了?

在此处输入图像描述

我已经尝试了下面的代码,它仍然在它周围放置了黑色边框。

UIImage *background = [UIImage imageNamed:@"Dismiss_normal.png"];
UIImage *backgroundSelected = [UIImage imageNamed:@"Dismiss_selected.png"];
self.closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.closeButton addTarget:self action:@selector(closeButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; //adding action
[self.closeButton setBackgroundImage:background forState:UIControlStateNormal];
[self.closeButton setBackgroundImage:backgroundSelected forState:UIControlStateSelected];
self.closeButton.frame = CGRectMake(0 ,0,background.size.width, background.size.height);
self.closeButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.closeButton];
self.navigationItem.leftBarButtonItem = self.closeButtonItem;

我注意到的是,如果我对按钮进行模态搜索,上面的代码周围仍然有黑色边框,但是如果我进行推送搜索,它不会?怎么回事?

4

6 回答 6

15

您必须将按钮类型设置为自定义,并将图标图像设置为按钮背景。示例代码:

UIImage *background = [UIImage imageNamed:@"icon.png"];
UIImage *backgroundSelected = [UIImage imageNamed:@"icon_selected.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(checkButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside]; //adding action
[button setBackgroundImage:background forState:UIControlStateNormal];
[button setBackgroundImage:backgroundSelected forState:UIControlStateSelected];
button.frame = CGRectMake(0 ,0,35,35);

然后将此按钮设置为您的 BarButtonItem,如下所示:

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = barButton;
于 2013-06-07T08:24:49.183 回答
7

我理解你的问题。

当您实际推送 aUIViewController时,它将成为现有UINavigationController. 所以UINavigationBar保留。但是,当您使用ModalViewController它只是另UIViewController一种“添加”到您现有的UIViewController. 所以UINavigationBar不会在那里。

但是您可以添加另一个UINavigationBarfromxib并添加一个UIButton. 但是不要直接添加UIButton,如果这样做它会自动转换为UIBarButton使其有边框。

所以先拖一个法线UIButton到你的UIView(不是导航栏)。将其更改为自定义并UIImage使用Attribute Inspector. 然后将该图像拖到您自定义创建的UINavigationBar. 它会像我刚才尝试的那样工作。您可以看到下面附上的屏幕截图。

在此处输入图像描述

于 2013-06-20T13:06:51.673 回答
4

这将更新整个应用程序中的所有后退按钮和导航栏。

我使用以下代码设置自定义导航后退按钮

UIImage *imgBack = [[UIImage imageNamed:@"nav_back.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(-6, 22, -6, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:imgBack forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

以及在导航栏上设置背景图像的以下代码。

UIImage *navBackgroundImage = [UIImage imageNamed:@"nav_bar.png"];
[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];
于 2013-06-16T15:52:35.957 回答
3

Try use [UIBarButtonItem initWithCustomView]

UIImage *menuButtonImage = [UIImage imageNamed:@"list.png"];// set your image Name here 
UIButton *btnToggle = [UIButton buttonWithType:UIButtonTypeCustom];
[btnToggle setImage:menuButtonImage forState:UIControlStateNormal];
btnToggle.frame = CGRectMake(0, 0, menuButtonImage.size.width, menuButtonImage.size.height);
UIBarButtonItem *menuBarButton = [[UIBarButtonItem alloc] initWithCustomView:btnToggle];
self.navigationItem.leftBarButtonItem = menuBarButton;
于 2013-06-07T05:00:25.510 回答
1

我个人喜欢FlatUIKit 的方法,通过 UIAppearance 将整个 UI 展平

本质上,您会执行以下操作:

UIImage *backButtonPortraitImage = [UIImage backButtonImageWithColor:color barMetrics:UIBarMetricsDefault cornerRadius:cornerRadius];
UIImage *highlightedBackButtonPortraitImage = [UIImage backButtonImageWithColor:highlightedColor barMetrics:UIBarMetricsDefault cornerRadius:cornerRadius];

[appearance setBackButtonBackgroundImage:backButtonPortraitImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[appearance setBackButtonBackgroundImage:highlightedBackButtonPortraitImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

UIImage *buttonImageNormal       = [UIImage imageWithColor:color cornerRadius:cornerRadius];
UIImage *buttonImageHightlighted = [UIImage imageWithColor:highlightedColor cornerRadius:cornerRadius];

[appearance setBackgroundImage:buttonImageNormal forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[appearance setBackgroundImage:buttonImageHightlighted forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
于 2013-06-16T04:29:49.513 回答
0

试试这个代码..

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *btnImage = [UIImage imageNamed:@"bg"];
[button setImage:btnImage forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, btnImage.size.width, btnImage.size.height);
[button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
UIImage *icon = [UIImage imageNamed:@"icon"]
UIImageView *iconView = [[UIImageView alloc] initWithImage:icon];
iconView.frame = CGRectMake(0, 0, icon.size.width, icon.size.height);
[button addSubview:iconView];
iconView..userInteractionEnabled=NO;
[iconView centerBothDirections];
[iconView release];
UIBarButtonItem *barbtn = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease];
self.navigationItem.leftBarButtonItem =barbtn
于 2013-06-07T05:24:13.650 回答