当我在searchBar上点击时,如何禁用UISearchController.seachBar的取消按钮?

时间:2018-08-07 14:36:04

标签: ios swift

我想在搜索栏上点击时禁用右键取消按钮。 由于使用Google Place搜索,我应该使用searchController?.searchBar 我尝试在

禁用取消按钮
func presentSearchController(_ searchController: UISearchController) {
    searchController.searchBar.showsCancelButton = false
}

但是当我点击searchBar时,我看到取消按钮如何出现和消失,那看起来很丑 请给我建议!

    override func viewDidLoad() {
    super.viewDidLoad()

    resultsViewController = GMSAutocompleteResultsViewController()
    resultsViewController?.delegate = self

    searchController = UISearchController(searchResultsController: resultsViewController)
    searchController?.searchResultsUpdater = resultsViewController

    searchController?.searchBar.sizeToFit()
    navigationItem.titleView = searchController?.searchBar
    searchController?.searchBar.placeholder = searchBarPlaceholderText
    searchController?.searchBar.tintColor = #colorLiteral(red: 0.1019607843, green: 0.5490196078, blue: 1, alpha: 1)
    searchController?.searchBar.delegate = self
    searchController?.delegate = self
    searchController?.searchBar.searchBarStyle = .prominent

    definesPresentationContext = true

    mapView.delegate = self
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest

    checklocationAuthorizationStatus()

    locationManager.requestWhenInUseAuthorization()
    locationManager.requestLocation()
    locationManager.startUpdatingLocation()
}


func presentSearchController(_ searchController: UISearchController) {
    searchController.searchBar.showsCancelButton = false
}

1 个答案:

答案 0 :(得分:1)

您可以创建一个自定义类和子类UISearchBar和UISearchViewController。 例如:-

class CustomizedSearchBar: UISearchBar {
    override func layoutSubviews() {
        super.layoutSubviews()
        setShowsCancelButton(false, animated: false)
    }
}

现在创建 CustomizedSearchBar 的对象,并在其他viewController中使用它。

或者您可以如下创建自定义的 searchViewController

class CustomizedSearchController: UISearchController, UISearchBarDelegate {

    lazy var _searchBar: CustomSearchBar = {
        [unowned self] in
        let result = CustomSearchBar(frame: CGRectZero)
        result.delegate = self

        return result
    }()

    override var searchBar: UISearchBar {
        get {
            return _searchBar
        }
    }
}

请点击this链接以获取更多详细信息。