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

Objective c 如何在导航栏按钮项中添加自定义图像?,objective-c,xcode,ios4,iphone,Objective C,Xcode,Ios4,Iphone,这是我的应用程序的代码,我需要在此按钮上添加图像吗 请帮助我。请尝试以下代码: UIBarButtonItem *doneitem=[[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donePressed:)]autorelease]; self.navigationItem.rightBarButtonItem=done

这是我的应用程序的代码,我需要在此按钮上添加图像吗

请帮助我。

请尝试以下代码:

 UIBarButtonItem *doneitem=[[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donePressed:)]autorelease];
    self.navigationItem.rightBarButtonItem=doneitem;
请尝试以下代码:

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;
一个简单的方法:

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

self.navigationItem.rightBarButtonItem=_btn;

然后,如果您需要不止一个按钮,您可以将另一个
UIBarButtonItem
添加到
initWithObjects

,以防任何人需要Swift代码获得公认答案:

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

p.S.Gurpret Singh answer仅适用于透明PNG,我还必须设置按钮的颜色,而不是clearColor。

执行此操作。更简单。

  • 将映像文件放在项目目录中

  • 将文件添加到Xcode(右键单击Xcode项目,将文件添加到“项目名称”)

  • 在故事板中选择你的UIBarButtonItem

  • 点击“图片”,找到你的图片(见截图)

  • 庆祝吧,因为它将完美地工作,并且不需要不必要的代码

  • 以在屏幕上拾取。要保持现有按钮的当前状态,请重新使用目标和操作

    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)
    

    Swift中

    使用渲染模式(UIImage.RenderingMode.alwaysOriginal)的
    的其他解决方案
    方法如下:

    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;
    

    这是对我有用的。我发现30x30是导航栏按钮的合适尺寸。UIImage会自动缩放到按钮大小

    let img = UIImage(named: "picture")!.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
    let leftBarButtonItem = UIBarButtonItem(image: img, style: UIBarButtonItem.Style.plain, target: self, action: nil)
    self.navigationItem.leftBarButtonItem = leftBarButtonItem
    

    它工作得很好,但当我点击按钮时,应用程序崩溃,模拟器突然退出。我如何才能做到这一点,并且不丢失故事板中按钮定义的Segue操作?Renato:给Segue一个名称并调用
    [self-performsguewithidentifier:@“yourSegueName”发送者:self]在按钮的目标操作中。urRequiredFrame是您希望按钮位于的帧,urImage是您希望的图像,因为按钮的图像必须测量按钮是否与@onmyway133一致。答案很简单,很有帮助。没错,这让事情变得简单多了。我这样做了,我的图像显示的是一个平坦的蓝色矩形,而不是我从项目中选择的图像。有什么想法吗?为了回答我自己的评论,我没有在.png图像文件中正确设置alpha,我必须用GIMP修改它,将白色设置为alpha。如何以这种方式为选定/未选定状态提供两个单独的图像
    
    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)
    
    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;
    
    let img = UIImage(named: "picture")!.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
    let leftBarButtonItem = UIBarButtonItem(image: img, style: UIBarButtonItem.Style.plain, target: self, action: nil)
    self.navigationItem.leftBarButtonItem = leftBarButtonItem
    
    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