2016-11-16 58 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() 
    } 
}