2016-11-16 55 views
0

我有2個控制器,一個是SubView。 主控制器可以訪問SearchBar屬性,並且SubViewController不可以。有在主控制器一個搜索欄的功能,我想在子視圖控制器來調用它是這個函數iOS Swift如何將搜索功能包含在另一個函數中

 // MainController 
     func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { 
     // Stop doing the search stuff 
     // and clear the text in the search bar 
     searchBar.text = "" 
     // Hide the cancel button 
     searchBar.showsCancelButton = false 
     searchBar.endEditing(true) 
     Popup.Close_View() 
     } 

我所試圖做的是包裹,上面的功能在另一個函數這樣

func Selected_Location() { 
     searchBarCancelButtonClicked(SearchBar) 
    } 

所以,在我的子視圖控制器我可以做

// SubView Controller 
    let Select_Close = MainController() 

    Select_Close.Selected_Location() 

我是新來的斯威夫特和如前所述我怎麼能得到searchBarCancel ButtonClicked函數並在另一個函數內調用它?我曾嘗試在幾個方面做如

func Selected_Location() { 
     searchBarCancelButtonClicked(_ searchBar: UISearchBar) 
    } 

    func Selected_Location() { 
     searchBarCancelButtonClicked(searchBar) 
    } 

再次我子視圖控制器沒有獲得一個UISearchBar,所以我試圖從子視圖中調用搜索欄關閉功能。

+0

的一個方法,根據您當前的描述也有幾件事情都不清楚:我假設MainController是搜索欄委託是否正確?你說你有兩個控制器,一個是子視圖。你的意思是你有兩個視圖和兩個視圖控制器,其中一個視圖是另一個視圖的子視圖,但他們都有自己的控制器?請提供更多細節。您將希望通過委託實現此功能。 –

回答

2

在子視圖,保持MainViewController的弱引用,然後調用mainviewcontroller searchBarCancel

class MainViewController:UIViewController { 
    var subViewController: SubViewController 
    func searchBarCancel(){ 
     searchBarCancelButtonClicked(self.searchBar) 
    } 
    func func2(){ 
     subViewController.mainController = self 
    } 
} 

class SubViewController:UIView { 
    weak var mainController: MainViewController? 
    func Selected_Location() { 
     mainController!.searchBarCancel() 
    } 
}