在 swift 中禁用代表

Disabling delegates in swift

我目前有一个名为 searchTextField 的文本字段。我还有两个按钮 firstButtonsecondButton。当我单击 firstButton 时,我通过添加相关委托 searchTextField.delegate=self.

在操作方法中启用 Google Places API

但是,我希望当我单击 secondButton 时,Google 地方 API 被禁用,它只是一个普通的文本字段。有没有办法禁用委托或其他方法来实现相同的结果?

@IBAction func firstAction(_ sender: Any) {
    searchTextField.delegate=self //google autocomplete
}

@IBAction func secondAction(_ sender: Any) {
    searchTextField.placeholder = "Search without Google API"
}

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    let autoCompleteController = GMSAutocompleteViewController()
    autoCompleteController.delegate = self

    let filter = GMSAutocompleteFilter()
    filter.type = .establishment
    autoCompleteController.autocompleteFilter = filter

    self.present(autoCompleteController, animated: true, completion: nil)
    return false
}

我想我会采取不同的做法

var googleAPIEnable = false
func viewDidLoad() {
  searchTextField.delegate = self
}

@IBAction func firstAction(_ sender: Any) {
  googleAPIEnable = false
}

@IBAction func secondAction(_ sender: Any) {
  searchTextField.text = nil
  searchTextField.placeholder = "Search without Google API"
  googleAPIEnabled = true
}

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
  guard googleAPIEnabled else {
    return true
  }

  let autoCompleteController = GMSAutocompleteViewController()
  autoCompleteController.delegate = self

  let filter = GMSAutocompleteFilter()
  filter.type = .establishment
  autoCompleteController.autocompleteFilter = filter

  self.present(autoCompleteController, animated: true, completion: nil)
  return false
}