2016-08-02 24 views
0

上下文:有一個UISearchController實現的地圖視圖。搜索控制器在不同的表視圖控制器中顯示其結果如何解除UISearchController視圖?

我找到了this answer,它解釋瞭如何在同一視圖中關閉搜索控制器。但是,我的結果頁面與原始頁面不同。我有

let resultsPage = ResultsTableViewController() 
let searchController = UISearchController(searchResultsController: resultsPage) 

所以現在當搜索控制器獲得結果時,它將它們顯示在表視圖控制器上。當用戶選擇其中一個結果時,我想關閉此視圖並返回到地圖視圖,並將它們的選擇傳遞給它。我應該用一個segue來做這件事,還是有更好的可編程方法?

回答

1

在我的應用程序中做了同樣的事情。我的地圖視圖控制器有一個搜索欄。當用戶輸入一個搜索字符串時,它會顯示一個表格視圖控制器,其中包含找到的地址列表。用戶可以選擇一個地址,然後關閉表格視圖控制器並在地圖上放置一個針對所選地址的針腳。

在顯示的表格視圖中,使用didSelectRowAtIndexPath關閉表格視圖控制器並使用協議/委託將選定項目傳遞迴地圖視圖控制器。讓您的地圖視圖控制器符合此協議。我做了這個確切的設置,它運作良好。

protocol DropPinOnSelectedLocationDelegate { 
    func dropPinOnLocation(placemark:MKPlacemark) 
} 

class LocationSearchTable: UITableViewController { 
... 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) 
    self.mySearchController.searchBar.endEditing(true) 
    if let indexPath = tableView.indexPathForCell(cell!) { 
     selectedItem = matchingItems[indexPath.row].placemark 
    } 
    self.dismissViewControllerAnimated(true, completion: { 
     self.delegate?.dropPinOnLocation(self.selectedItem!) 
    }) 
    } 
} 
+0

我最終最終做了同樣的事情。 segue並不乾淨,所以我使用didSelect將值傳遞迴地圖視圖,然後調用self.dismissViewControllerAnimated,並完成地圖視圖的搜索功能。要傳遞該值,我需要在ResultsTableViewController中引用MapViewController。我創建瞭如原始問題所示的ResultsTableViewController,然後我說resultPage.mapView = self –

相關問題