如何在导航栏按钮项中添加自定义图像?

问题描述:

UIBarButtonItem *doneitem=[[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donePressed:)]autorelease]; 
    self.navigationItem.rightBarButtonItem=doneitem; 

这是我的应用程序的代码,我需要在此按钮上添加图像?如何在导航栏按钮项中添加自定义图像?

请帮帮我。

试试这个代码:

UIImage* image3 = [UIImage imageNamed:@"mail-48_24.png"]; 
CGRect frameimg = CGRectMake(0, 0, image3.size.width, image3.size.height); 
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg]; 
[someButton setBackgroundImage:image3 forState:UIControlStateNormal]; 
[someButton addTarget:self action:@selector(sendmail) 
    forControlEvents:UIControlEventTouchUpInside]; 
[someButton setShowsTouchWhenHighlighted:YES]; 

UIBarButtonItem *mailbutton =[[UIBarButtonItem alloc] initWithCustomView:someButton]; 
self.navigationItem.rightBarButtonItem=mailbutton; 
[someButton release]; 
+1

它的伟大工程,但是当我在按钮上单击应用程序崩溃是和仿真器突然退出。 – 2011-05-09 08:17:52

+0

我该怎么做,不要失去在故事板中定义到按钮的塞格动作? – 2013-08-02 13:31:59

+0

Renato:给这个segue一个名字,并且在按钮的目标动作中调用'[self performSegueWithIdentifier:@“yourSegueName”sender:self];'' – lari 2013-08-06 12:20:40

[doneItem setImage:[UIImage imageNamed:@"yourImage.png"] forState:UIControlStateNormal]; 
+0

在完成项目上生成错误 – 2011-05-09 08:00:55

UIButton *urButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
urButton.frame = urRequiredFrame; 
[urButton setImage:urImage forState:UIControlStateNormal]; 
[urButton addTarget:self action:@selector(donePressed:) 
    forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithCustomView:urButton]; 
self.navigationItem.rightBarButtonItem=doneButton; 
+1

urRequiredFrame; ???? urImage ??? – 2011-05-09 08:11:02

+0

urRequiredFrame是你想要的按钮框架和urImage是图像你想要的图像为按钮 – visakh7 2011-05-09 08:28:24

+0

+1它对我有帮助 – Praveenkumar 2013-01-08 12:43:13

请试试这个代码:

UIButton *btnNext1 =[[UIButton alloc] init]; 
[btnNext1 setBackgroundImage:[UIImage imageNamed:@"btnNext.png"] forState:UIControlStateNormal]; 

btnNext1.frame = CGRectMake(100, 100, 50, 30); 
UIBarButtonItem *btnNext =[[UIBarButtonItem alloc] initWithCustomView:btnNext1]; 
[btnNext1 addTarget:self action:@selector(nextButtonClicked) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.rightBarButtonItem = btnNext; 

UIBarButtonItem *_btn=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"XXXXXXX.png"] 
                style:UIBarButtonItemStylePlain 
                target:self 
                action:@selector(yourMethod)]; 

self.navigationItem.rightBarButtonItem=_btn; 
+3

它很难相信这个答案得到几票 – onmyway133 2013-12-23 05:00:20

+1

只需要措施按钮 – 2014-02-28 22:19:23

+0

完全同意@ onmyway133。真的很简单和有用的答案。 – lerp90 2015-10-21 13:35:48

一个简单的方法:

UIImage* customImg = [UIImage imageNamed:@"custom-img.png"]; 

UIBarButtonItem *_customButton = [[UIBarButtonItem alloc] initWithImage:customImg style:UIBarButtonItemStyleDone target:nil action:nil]; 

self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects:_customButton, nil]; 

然后如果你需要多个按钮,你可以和其他UIBarButtonIteminitWithObjects

如果有人需要斯威夫特代码接受的答案:

let infoImage = UIImage(named: "my-icon-32.png") 
let imgWidth = infoImage?.size.width 
let imgHeight = infoImage?.size.height 
let button:UIButton = UIButton(frame: CGRect(x: 0,y: 0,width: imgWidth!, height: imgHeight!)) 
button.setBackgroundImage(infoImage, forState: .Normal) 
button.addTarget(self, action: Selector("openInfo"), forControlEvents: UIControlEvents.TouchUpInside) 
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button) 

附: Gurpreet Singh答案只适用于透明PNG,我还必须设置除clearColor以外的按钮tintcolor。

做到这一点。它更简单。

  1. 把图像文件在项目目录

  2. 文件添加到Xcode中(右键点击Xcode项目,文件添加到“项目名称”)

  3. 选择您的UIBarButtonItem在故事板

  4. 点击“图像”,找到你的形象(见截图)

  5. 庆祝,因为它可以完美工作,并且不需要不必要的代码。

enter image description here

+1

我做到了这一点,我的图像显示了一个扁平的蓝色矩形,而不是我从我的项目中选择的图像。有任何想法吗? – ammianus 2017-07-23 17:00:59

+2

要回答我自己的评论,我没有正确设置在.png图像文件中的alpha,我不得不用GIMP修改它以将白色设置为alpha。 – ammianus 2017-07-23 17:24:18

+0

如何为选定/未选定状态提供两种单独的图像 – danchik 2017-09-01 21:31:56

要拿起了answer by Gurpreet Singh。要保持已有按钮的当前状态,请重新使用目标和操作。

SEL selector = self.navigationItem.rightBarButtonItem.action; 
id target = self.navigationItem.rightBarButtonItem.target; 
UIBarButtonItem *_btn=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"icon_close.png"] 
                 style:UIBarButtonItemStylePlain 
                target:target 
                action:selector]; 

self.navigationItem.rightBarButtonItem = _btn; 

斯威夫特

其他解决方案使用以下方法imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

let img = UIImage(named: "picture")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) 
let leftBarButtonItem = UIBarButtonItem(image: img, style: UIBarButtonItemStyle.Plain, target: self, action: nil) 
self.navigationItem.leftBarButtonItem = leftBarButtonItem 

下面是我的作品。我发现30x30在导航栏中的按钮尺寸很好。 UIImage自动缩放到按钮尺寸。

UIImage *image = [UIImage imageNamed:@"XXXXXXXXXX"]; 
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; 
[button setBackgroundImage:image forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(someAction) forControlEvents:UIControlEventTouchUpInside]; 
button.adjustsImageWhenHighlighted = NO; 
UIBarButtonItem *rightButton =[[UIBarButtonItem alloc] initWithCustomView:button]; 
self.navigationItem.rightBarButtonItem = rightButton; 

let sliderImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 30)) 
    sliderImageView.contentMode = .ScaleAspectFit 
    sliderImageView.image = UIImage(named: "sliderMenu") 

    OR 

    var sliderImage = UIImage(named: "sliderMenu") 
    navigationItem.leftBarButtonItem?.image = sliderImage