2015-12-21 8 views
5

Ich bin völlig neu zu tvos und ich versuche, eine UISearchController Ansicht zu implementieren, wo in meinem SearchResultsViewController ich zwei UICollectionViews haben übereinander angezeigt: enter image description hereWie verwerfen Sie die Tastatur in UISearchController, wenn Sie den Fokus in TVs ändern?

Das Problem, dass, wenn der Benutzer klaut nach unten Um eines der Elemente in der UICollectionView auszuwählen, wird die Tastatur nicht geschlossen. Auch wenn du zurück wischst, um die Tastatur auszuwählen, scrollst du nicht vollständig und es ist unmöglich zu sehen, was du tippst. Die resultierende Ansicht ist folgende:

Idealerweise möchte ich die Tastatur ablehnen, wenn der Benutzer nach unten wischt, um sich auf etwas anderes in der Benutzeroberfläche zu konzentrieren. Ich schaute auf Apples tvos UIKit Catalog und ihr Beispiel zeigt einen UISearchController, der die Tastatur beim Ändern des Fokus entlässt, aber ich sehe nicht, dass sie irgendetwas anders machen.

Hier ist der Code, den ich meine UISearchController Konfiguration siehe bin, wenn der Benutzer auf eine Schaltfläche klickt:

@IBAction func onSearchButton(sender: AnyObject) { 
    guard let resultsController = storyboard?.instantiateViewControllerWithIdentifier(SearchResultsViewController.storyboardID) as? SearchResultsViewController else { fatalError("Unable to instantiate a SearchResultsViewController.") } 

    // Create and configure a `UISearchController`. 
    let searchController = UISearchController(searchResultsController: resultsController) 
    searchController.searchResultsUpdater = resultsController 
    searchController.hidesNavigationBarDuringPresentation = false 

    let searchPlaceholderText = NSLocalizedString("Search for a Show or Movie", comment: "") 
    searchController.searchBar.placeholder = searchPlaceholderText 

    // Present the search controller from the root view controller. 
    guard let rootViewController = view.window?.rootViewController else { fatalError("Unable to get root view controller.") } 
    rootViewController.presentViewController(searchController, animated: true, completion: nil) 
} 

Antwort

4

Nach ziemlich viel Versuch und Irrtum, ich war in der Lage, die Lösung herauszufinden.

Die Tastatur wird sich selbst automatisch zurückzuweisen, solange: 1) Die Position der Benutzer auf konzentriert sich innerhalb eines Scroll ist 2), um die Scrollinhaltsgröße ist durch mindestens 1 Pixel (1081px), um die Bildschirmhöhe größer als.

+0

Ich habe Probleme mit diesem Problem, änderte die Höhe des Inhalts der Scrollview nicht für mich. Wie haben Sie Ihre View-Controller strukturiert? –

+0

@AaronStephenson Ich habe auch das gleiche Problem. Haben Sie eine Lösung für das Problem gefunden? –

3

Nach ziemlich vielen Versuchen, endlich habe ich herausgefunden. Der Grund ist, dass Sie verschachtelte ScrollViews in searchResultsController haben.

"ScrollViews" natürlich enthält UICollectionView, UITableView und UIScrollView.

Nach meinen Untersuchungen verhält sich UISearchController wie folgt.

  1. Wenn die erste Ansicht, die in searchResultsController fokussiert wird subview des inneren Scroll ist (die die horizontale UICollectionView ist, in Ihrem Fall), dann Sie Tastatur nicht versteckt wie erwartet bekommen.

  2. Interessanterweise, wenn die erste Ansicht, die in searchResultsController fokussiert wird, die Unteransicht von outer scrollView ist, dann wird die Tastatur komplett ausgeblendet, animiert, wie erwartet (!).

Ich denke, das ist eine Art von UIKit's Bug.

0

Ich hatte genau das gleiche Layout und konnte dies bisher nicht erreichen. Ich glaube, dass Sie false in tableView zurückgeben (tableView: UITableView, canFocusRowAtIndexPath indexPath: NSIndexPath) -> Bool, damit die einzelnen Zellen in der Sammlungsansicht horizontal mit dem richtigen Fokusverhalten scrollen können. Ich denke, es verursacht die Probleme. Wenn Sie die erste Zelle in der Tabellenansicht fokussierbar machen, verschwindet das Problem, aber das Fokusverhalten ist natürlich nicht erwünscht. Ich habe das gerade herausgefunden und werde morgen versuchen, herauszufinden, was ich dagegen tun kann. Ich spüre, dass ich ein neues Design benötige, das es mir erlaubt, eine einzelne CollectionView oder TableView zu verwenden, deren Zellen in resultsController fokussierbar sind. Hoffe, das ist in tvOS 10 leicht erreichbar.

0

Work Around Lösung: Hinzufügen einer Dummy-Zelle bei IndexPath.Zeile == 0 mit Höhe als 1 Pixel und aktivieren Sie den Fokus darauf.

Verwandte Themen