美文网首页
【Swift】UISearchBar 的取消按钮属性

【Swift】UISearchBar 的取消按钮属性

作者: 文刂Rn | 来源:发表于2018-12-01 10:12 被阅读14次
QQ20181201-0.PNG

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var searchBar: UISearchBar!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        searchBar.delegate = self
        searchBar.placeholder = "搜索"
        
        // 设置背景色
        searchBar.setBackgroundImage(self.imageWithColor(color: UIColor.orange), for: UIBarPosition.any, barMetrics: UIBarMetrics.default)
        
        // 设置圆角
        guard let searchField = searchBar.value(forKey: "searchField") as? UITextField else {
            return
        }
        searchField.layer.cornerRadius = 14
        searchField.layer.borderColor = UIColor.red.cgColor
        searchField.layer.borderWidth = 0.5
        searchField.layer.masksToBounds = true
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        searchBar.showsCancelButton = false
        searchBar.resignFirstResponder()
    }

    // UIColor生成纯色图片
    fileprivate func imageWithColor(color: UIColor, size: CGSize = CGSize(width: 55, height: 1)) -> UIImage {
        
        let rect: CGRect = CGRect(origin: CGPoint.zero, size: size)
        
        UIGraphicsBeginImageContext(rect.size)
        
        let context: CGContext = UIGraphicsGetCurrentContext()!
        
        context.setFillColor(color.cgColor)
        
        context.fill(rect)
        
        let image = UIGraphicsGetImageFromCurrentImageContext()
        
        UIGraphicsGetCurrentContext()
        
        return image!
    }
}

extension ViewController: UISearchBarDelegate {
    
    func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
        
        // 设置取消按钮
        UIView.animate(withDuration: 0.4) {
            searchBar.showsCancelButton = true
            
            for v in searchBar.subviews {
                
                for _v in v.subviews {
                    
                    if let _cls = NSClassFromString("UINavigationButton") {
                        
                        if _v.isKind(of: _cls) {
                            guard let btn = _v as? UIButton else { return }

                            btn.setTitle("取消", for: .normal)
                            btn.setTitleColor(UIColor.red, for: .normal)
                            return
                        }
                    }
                    
                }
                
            }
        }
        
        
    }
    
    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
        searchBar.showsCancelButton = false
        searchBar.resignFirstResponder()
    }
    
    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        searchBar.showsCancelButton = false
        searchBar.resignFirstResponder()
    }
    
    
}

相关文章

网友评论

      本文标题:【Swift】UISearchBar 的取消按钮属性

      本文链接:https://www.haomeiwen.com/subject/rlelcqtx.html