【问题标题】:iOS get default UISearchBar icon to set in UIButtoniOS 获取默认 UISearchBar 图标以在 UIButton 中设置
【发布时间】:2015-09-11 09:27:46
【问题描述】:

我正在尝试在另一个 UIButton 中设置默认的 UISearchBar 图标(放大镜)。

PS:我不想使用从某个地方下载的 png,我想使用默认的。

添加带有自定义图像的按钮的功能只是为了展示一些示例:

func addRightNavigationButton(){
    let buttonBack: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
    buttonBack.frame = CGRectMake(0, 0, 30, 33)
    buttonBack.setImage(UIImage(named:"search.png"), forState: UIControlState.Normal)
    buttonBack.addTarget(self, action: "barButtonItemClicked:", forControlEvents: UIControlEvents.TouchUpInside)
    var rightBarButtonItem: UIBarButtonItem = UIBarButtonItem(customView: buttonBack)
    self.navigationItem.setRightBarButtonItem(rightBarButtonItem, animated: false)
}

【问题讨论】:

    标签: ios uibutton uisearchbar


    【解决方案1】:

    在 Objective-C 中:

    UIBarButtonItem *searchItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(searchButtonItemClicked:)];
    [self.navigationItem setRightBarButtonItem:searchItem animated:FALSE];
    

    在 Swift 1.2 中:

    let searchItem : UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, target: self, action: "searchButtonItemClicked:")
    self.navigationItem.rightBarButtonItem = searchItem;
    

    【讨论】:

    • 谢谢@Nishant,我试过用swift,但xcode说找不到“UIBarButtonSystemItemSearch”,你能在swift中提供一个sn-p吗
    • 当然。我已经用快速代码更新了我的答案。请检查。
    • 在您回答之前再次感谢您,我知道该怎么做,但谢谢。抱歉这个菜鸟问题我是一个从 iOS 开始的 Android 人,所以有时很难从 Android 结构切换到 iOS
    【解决方案2】:

    为 Swift 3 更新

    let searchBtn : UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.search, target: self, action: #selector(self.searchFunction))
    self.navigationItem.rightBarButtonItem = searchBtn;
    

    【讨论】:

      【解决方案3】:

      您可以使用此 UIImage 扩展在应用中的任何位置获取系统图标。

      import UIKit
      
      extension UIImage {
      
          public convenience init?(_ systemItem: UIBarButtonItem.SystemItem) {
      
              guard let sysImage = UIImage.imageFrom(systemItem: systemItem)?.cgImage else {
                  return nil
              }
      
              self.init(cgImage: sysImage)
          }
      
          private class func imageFrom(systemItem: UIBarButtonItem.SystemItem) -> UIImage? {
      
              let sysBarButtonItem = UIBarButtonItem(barButtonSystemItem: systemItem, target: nil, action: nil)
      
              //MARK:- Adding barButton into tool bar and rendering it.
              let toolBar = UIToolbar()
              toolBar.setItems([sysBarButtonItem], animated: false)
              toolBar.snapshotView(afterScreenUpdates: true)
      
              if  let buttonView = sysBarButtonItem.value(forKey: "view") as? UIView{
                  for subView in buttonView.subviews {
                      if subView is UIButton {
                          let button = subView as! UIButton
                          let image = button.imageView!.image!
                          return image
                      }
                  }
              }
              return nil
          }
      }
      

      这是我们如何使用它的示例:

       let button = UIButton() ;
       let systemImage = UIImage(systemItem: UIBarButtonSystemItem.search) ;
       button.setImage(systemImage, for: .normal)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-07
        • 1970-01-01
        • 2020-08-26
        • 2016-07-26
        • 1970-01-01
        • 1970-01-01
        • 2019-11-05
        • 1970-01-01
        相关资源
        最近更新 更多