2015-03-17 2 views
10

Possiedo un UITableVIewController che implementa UISearchBarDelegate, la vista è incorporata in un Navigation Controller.UISearchController Casella di ricerca Shift Down Tap

class FacilityTableViewController: UITableViewController, UISearchResultsUpdating, UISearchBarDelegate, AmenityFilterDelegate { 

     // MARK: - Public Variables 

     var targetFacilities = [Int]() 
     var searchController: UISearchController = UISearchController(searchResultsController: nil) 

     // MARK: - Private Variables 

     private var viewModel: FacilityTableViewModel! 
     private let parkGreenColor = UIColor(red: 73/255, green: 136/255, blue: 84/255, alpha: 1) 
     private var showEmptyMessage = false 

     // MARK: - View Lifecycle 

     /** 
     Setup view after loading 
     */ 
     override func viewDidLoad() { 
      super.viewDidLoad() 

      trackScreenView("Facility Table View") 

      if targetFacilities.isEmpty { 
       viewModel = FacilityTableViewModel() 
      } else { 
       viewModel = FacilityTableViewModel(facilityIds: targetFacilities) 
      } 

      // Seup search controller 
      searchController.searchResultsUpdater = self 
      searchController.dimsBackgroundDuringPresentation = false 
      searchController.hidesNavigationBarDuringPresentation = false 
      searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, searchController.searchBar.frame.origin.y, searchController.searchBar.frame.size.width, 44) 
      searchController.searchBar.tintColor = UIColor.whiteColor() 
      searchController.searchBar.barTintColor = parkGreenColor 
      searchController.searchBar.translucent = false 

      self.definesPresentationContext = true 

      tableView.tableHeaderView = searchController.searchBar 
     } 

Before Tapping on Search

ho scoperto che quando ho disabilitato proprietà traslucido della barra di navigazione la casella di ricerca sposta la sua posizione verso il basso.

After Tapping on Search

Se ho impostato il definesPresentationContext = false poi la barra di ricerca non si sposta verso il basso, se inserisco il testo nella casella di ricerca e selezionare uno dei risultati della finestra modale risultante non può aprire. Ottengo il seguente errore:

Search Results

2015-03-17 15:06:56.101 VB ParkFinder[16368:2667719] Warning: Attempt to present <UINavigationController: 0x7fa2f9ced930> on <VB_ParkFinder.FacilityTableViewController: 0x7fa2f9c27ba0> which is already presenting (null) 

Qui di seguito è il mio codice segue:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     let navController = segue.destinationViewController as UINavigationController 
     if segue.identifier == "facilityDetailsSegue" { 
      let detailsViewController = navController.childViewControllers.last as FacilityDetailsViewController 

      if let indexPath = tableView.indexPathForSelectedRow() { 
       var facilityId: Int 
       if searchController.active { 
        facilityId = viewModel.idForSearchResultsAtIndexPath(indexPath) 
       } else { 
        facilityId = viewModel.idForFacilityAtIndexPath(indexPath) 
       } 

       detailsViewController.currentFacilityId = facilityId 
      } 
     } else if segue.identifier == "FilterPopover" { 
      let aftvc = navController.childViewControllers.last as AmenityFilterTableViewController 
      aftvc.delegate = self 
     } 
    } 

sono perso su cosa fare. Voglio lasciare la barra di navigazione con traslucenza spenta e ho bisogno di essere in grado di avviare una finestra modale dai risultati della ricerca. Qualche idea su come realizzare questo?

+1

possibile duplicato di [Strano UISearchDisplayController visualizzazione del comportamento di offset in iOS 7 quando incorporato nella barra di navigazione] (http://stackoverflow.com/questions/20731360/strange-uisearchdisplaycontroller-view-offset-behavior-in-ios-7- when-embedded-in) –

risposta

5

ho avuto lo stesso problema, dare un'occhiata a

Strange UISearchDisplayController view offset behavior in iOS 7 when embedded in navigation bar

Questo risolto il mio problema.

Indovina che potrebbe essere contrassegnato come duplicato, non è sicuro come farlo.

+0

Per favore, non pubblicare link. Invece scrivi la soluzione attuale qui. Il collegamento può morire. – Raphael

+1

Per risparmiare tempo: il collegamento è in genere relativo all'impostazione "Sotto barre superiori" e "Sotto barre opache" su TRUE per il controller di visualizzazione che presenta una vista tabella con la barra di ricerca che causa problemi. –