Swift: 如何使用delegate

Swift: How use delegate

我有 AllOrganizacionUIView class,我使用了 UISearchBarDelegate 委托,在 workink

class AllOrganizacionUIView: UIView , UISearchBarDelegate {

  @IBOutlet var SearchBar: UISearchBar!
  var searchActive : Bool = false

  func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
    searchActive = true;
  }

  func searchBarTextDidEndEditing(searchBar: UISearchBar) {
    searchActive = false;
  }

  func searchBarCancelButtonClicked(searchBar: UISearchBar) {
    searchActive = false;
  }

  func searchBarSearchButtonClicked(searchBar: UISearchBar) {
    searchActive = false;
    aa.SearchBar.endEditing(true)
    print("hajox")
  }
}

我在 ViewController class、

中使用了 UISearchBarDelegate 委托
 class ViewController: UIViewController{
   @IBOutlet var SearchBar: UISearchBar!
   // not working
   func searchBarShouldBeginEditing(searchBar: UISearchBar) -> Bool {
     self.CircleImageView_3.image = UIImage(named: "FullCircle")
     self.CircleImageView_2.image = UIImage(named: "Circle")
     self.CircleImageView_1.image = UIImage(named: "Circle")
     self.mMainCategory.hidden = true
     self.mAllCategores.hidden = true
     self.mAllOrganizations.hidden = false
     self.FooterViewController.text = "Основные категории"

     return true
   }
}

请帮我解决这个问题。

您必须为您的搜索栏设置委托,可能在 viewDidLoad():

override func viewDidLoad() {
    super.viewDidLoad()
    self.SearchBar.delegate = self
}

但如果将代理指向故事板而不是代码,效果会更好。

所以,我在您的代码中发现了两个问题。首先,你的意思是你的委托是一个 UIView 子类。但是你的意思是你想使用在 UIViewController 子类中实现的委托。

您只能同时拥有一名代表。选择一个(首选视图控制器),并在那里实现所有委托方法。然后按照我在回答开头所说的设置委托即可。

实际上,我建议您在 Apple 官方文档网站上阅读有关 protocols 和委托的内容。确实有必要仔细阅读文档,因为 iOS 中有很多与其他平台不同的独特之处。

覆盖 func viewDidLoad() {

super.viewDidLoad()
self.SearchBar.delegate = self

}

或在故事板中设置您的代表。