Swift:如何使用委托

时间:2016-01-12 08:42:22

标签: ios swift delegates searchbar

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

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类中使用了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
   }
}

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

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

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

但如果你将代表指向故事板而不是代码,情况会好得多。

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

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

实际上,我建议您阅读Apple官方文档网站上的protocols和代表。我们需要仔细阅读文档,因为iOS中有许多与其他平台不同的独特内容。

答案 1 :(得分:0)

覆盖func viewDidLoad(){

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

}

或在storyboard中设置您的委托。