2011-05-09 93 views
25
UIBarButtonItem *doneitem=[[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donePressed:)]autorelease]; 
    self.navigationItem.rightBarButtonItem=doneitem; 

這是我的應用程序的代碼,我需要在此按鈕上添加圖像?如何在導航欄按鈕項中添加自定義圖像?

請幫幫我。

回答

80

試試這個代碼:

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

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

在完成項目上生成錯誤 – 2011-05-09 08:00:55

5
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

7

請試試這個代碼:

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; 
51
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

0

一個簡單的方法:

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

5

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

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。

0

做到這一點。它更簡單。

  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

0

要拿起了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; 
3

斯威夫特

其他解決方案使用以下方法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 
3

下面是我的作品。我發現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; 
0
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 
相關問題