【问题标题】:How to add custom image in navigation bar button item?如何在导航栏按钮项中添加自定义图像?
【发布时间】:2011-08-21 11:39:48
【问题描述】:
 UIBarButtonItem *doneitem=[[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donePressed:)]autorelease];
    self.navigationItem.rightBarButtonItem=doneitem;

这是我应用的代码,我需要在这个按钮上添加图片吗?

请帮帮我。

【问题讨论】:

    标签: objective-c xcode ios4 iphone


    【解决方案1】:

    试试这个代码:

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

    【讨论】:

    • 它工作得很好,但是当我点击按钮应用程序时崩溃并且模拟器突然退出。
    • 我怎样才能做到并且不丢失故事板中定义给按钮的 Segue 动作?
    • Renato:给 segue 命名,并在按钮的目标操作中调用 [self performSegueWithIdentifier:@"yourSegueName" sender:self];。
    【解决方案2】:
     UIBarButtonItem *_btn=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"XXXXXXX.png"] 
                                                      style:UIBarButtonItemStylePlain 
                                                      target:self 
                                                      action:@selector(yourMethod)];
    
    self.navigationItem.rightBarButtonItem=_btn;
    

    【讨论】:

    • 只需要措施按钮
    • 完全同意@onmyway133。非常简单且有用的答案。
    • 是的,这让事情变得容易多了。
    【解决方案3】:

    请试试这个代码:

    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;
    

    【讨论】:

      【解决方案4】:
      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;
      

      【讨论】:

      • urRequiredFrame 是您希望按钮所在的框架,urImage 是您希望作为按钮图像的图像
      【解决方案5】:

      如果有人需要 Swift 代码来接受答案:

      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。

      【讨论】:

        【解决方案6】:

        在 斯威夫特

        以下使用withRenderingMode(UIImage.RenderingMode.alwaysOriginal)方法的其他解决方案:

        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
        

        【讨论】:

          【解决方案7】:

          这对我有用。我发现 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;
          

          【讨论】:

            【解决方案8】:
            [doneItem setImage:[UIImage imageNamed:@"yourImage.png"] forState:UIControlStateNormal];
            

            【讨论】:

              【解决方案9】:

              一种简单的方法:

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

              然后,如果您需要多个按钮,您可以将另一个 UIBarButtonItem 到 initWithObjects。

              【讨论】:

                【解决方案10】:

                这样做。它更简单。

                1. 把图片文件放到你的项目目录中

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

                3. 在 Storyboard 中选择您的 UIBarButtonItem

                4. 点击“图片”并找到您的图片(见截图)

                5. 庆祝一下,因为它可以完美运行,而且不需要不必要的代码。

                【讨论】:

                • 我这样做了,我的图像显示的是一个扁平的蓝色矩形,而不是我从项目中选择的图像。有什么想法吗?
                • 要回答我自己的评论,我没有在 .png 图像文件中正确设置 alpha,我必须使用 GIMP 对其进行修改以将白色设置为 alpha。
                • 如何以这种方式为选定/未选定状态提供两个单独的图像
                【解决方案11】:

                接听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;
                

                【讨论】:

                  【解决方案12】:
                     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
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-04-23
                    • 2011-09-04
                    相关资源
                    最近更新 更多