自定义UIBarButtonItem

jdo*_*dog 7 objective-c uinavigationbar uibarbuttonitem ios

我正在尝试创建一个自定义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;
Run Code Online (Sandbox Code Playgroud)

我注意到的是,如果我按下一个模态segue按钮,上面的代码仍然有一个黑色边框,但如果我做了推送segue它不是吗?WTF?

Pri*_*990 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);
Run Code Online (Sandbox Code Playgroud)

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

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = barButton;
Run Code Online (Sandbox Code Playgroud)


Jav*_*esh 7

我明白你的问题.

当你真正推动UIViewController它将成为现有的一部分UINavigationController.所以UINavigationBar保留.但是,当你使用ModalViewController它只是另UIViewController一种"添加"到你现有的UIViewController.所以UINavigationBar不会在那里.

但是,你可以添加其他UINavigationBarxib并添加UIButton.但是不要直接添加UIButton,如果这样做,它会自动转换为UIBarButton使其边界化.

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

在此输入图像描述