美文网首页
【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