iOS 获取要在 UIButton 中设置的默认 UISearchBar 图标
iOS get default UISearchBar icon to set in UIButton
我正在尝试获取默认的 UISearchBar 图标(放大镜)以在另一个 UIButton 中设置。
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)
}
在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;
更新 Swift 3
let searchBtn : UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.search, target: self, action: #selector(self.searchFunction))
self.navigationItem.rightBarButtonItem = searchBtn;
您可以使用此 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)
我正在尝试获取默认的 UISearchBar 图标(放大镜)以在另一个 UIButton 中设置。
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)
}
在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;
更新 Swift 3
let searchBtn : UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.search, target: self, action: #selector(self.searchFunction))
self.navigationItem.rightBarButtonItem = searchBtn;
您可以使用此 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)