2016-01-12 30 views
-1

我有AllOrganizacionUIView類,我用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") 
    } 
} 

如何我已經在視圖控制器類使用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 
    } 
} 

請幫助我解決這個問題。

+1

你應該更熟悉https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html 簡單地說,委託是你在「 searchBar「並通過執行self.delegate.doSomething只是意味着你在你的對象中執行了」doSomething「方法,如果你使用它的話,你分配了代理到 – Injectios

回答

1

你必須viewDidLoad()設置委託你的搜索欄,可能是:

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

但它會更好,如果你點的故事板,而不是代碼的委託。

所以,我看到你的代碼中有兩個問題。首先,你的意思是你的代表是UIView的子類。但是你的意思是你想要使用在UIViewController子類中實現的委託。

您只能同時擁有一個代表。選擇一個(視圖控制器是首選),並在那裏實現所有委託方法。然後按照我在答覆開始時所說的設置代表。

其實,我建議你在官方的Apple文檔網站上閱讀protocols和代表。真的有必要仔細閱讀文檔,因爲iOS中有很多獨特的東西與其他平臺不同。

+0

AllOrganizacionUIView UISearchDelegate不起作用 –

+0

@ՍարգիսԽաչատրյան因爲你只能同時擁有一個代理。 –

0

覆蓋FUNC viewDidLoad中(){

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

}

,或者設置在故事板的委託。

+0

我知道,我已經在2級中使用了1個搜索欄代表 –