2016-11-14 1 views
0

У меня есть 2 контроллера: Controller1 и Controller2, который служит в качестве SubView. Controller1 имеет прикрепленный к нему UISearchBar, а OnClick Controller2 отображается как SubView с TableView. В качестве пользовательских типов в SearchBar я могу получить результаты с помощью этогоIOS Swift Как получить текстовое значение SearchBar на View 1 to View 2

// Controller1 
    @IBOutlet weak var mySearch: UISearchBar! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    mySearch.delegate = self 
    // Do any additional setup after loading the view. 
} 
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String){ 
     if let text = searchBar.text { 
      let search = text.trimmingCharacters(in: .whitespaces) 
      _ = search 

     } 
    } 

Теперь моя самая большая проблема получает значение, которое я получаю в SearchText и передавая его на Controller2 Как я могу идти об этом ? Controller2 выполняет запрос HTTP-сообщения и будет использовать значение SearchText в Controller1. Это код в Controller2

class Controller2: UIViewController,UITableViewDataSource { 
@IBOutlet weak var TableSource: UITableView! 



override func viewDidLoad() { 
    super.viewDidLoad() 

    TableSource.dataSource = self 

    // I would like to get value of SearchText here so that I can 
    // send it as a parameter in my HttpPost request 

    session.dataTask(with:request, completionHandler: {(data, response, error) in 
     if error != nil { 

     } else { 
      do { 

       // get Json Data 

      } catch let error as NSError { 
       print(error) 
      } 
      print(self.locations) 
     } 

    }).resume() 



} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int { 
    return locations.count 
} 





func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Registration_Search", for: indexPath) 

    return cell 
} 



} 

Это в Controller1 и на отводе UISearchBar это, как я получаю Controller2 как подвид

func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { 
      Location_Search.showsCancelButton = true 

     let Popup = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Controller2") as! Controller2 
     self.addChildViewController(Popup) 
     Popup.view.frame = self.Controller2.frame 
     self.view.addSubview(Popup.view) 
     Popup.didMove(toParentViewController: self) 
     return true 
    } 
+0

Какова иерархия viewcontrollers как? У обоих есть разные навигационные контроллеры или те же самые? – Sethmr

+0

Они всего лишь 2 разных контроллера ViewControllers нет контроллеров навигации – user1591668

+0

Два разных контроллера просмотра, которые находятся внутри чего? Они должны быть в чем-то или в какой-то форме иерархии, чтобы вы могли получить доступ к обоим из них одновременно. – Sethmr

ответ

0

попробовать это:

func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { 
      Location_Search.showsCancelButton = true 

     let Popup = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Controller2") as! Controller2 
     self.addChildViewController(Popup) 
     Popup.view.frame = self.Controller2.frame 
     Popup.textFromSearch = mySearch.text 
     self.view.addSubview(Popup.view) 
     Popup.didMove(toParentViewController: self) 
     return true 
    } 

и в вашем Контроллер 2 сразу после IBOutlet добавить var:

var textFromSearch = "" 
Смежные вопросы