2015-12-21 59 views
5

Jestem całkowicie nowy w tvos i próbuję wdrożyć widok UISearchController gdzie, moim SearchResultsViewController, mam dwa UICollectionViews wyświetlane jedna nad drugą: enter image description hereJak odłączyć klawiaturę w UISearchController podczas zmiany ostrości w TVO?

Problemem jest to, że gdy użytkownik przejeżdża w dół aby wybrać jedną z pozycji w UICollectionView, klawiatura nie jest odrzucana. Nawet przesuwanie do góry, aby wybrać klawiaturę, nie jest w pełni przewijane w górę i nie można zobaczyć, co piszesz. Wynikowy widok jest następujący: enter image description here

Idealnie chciałbym odrzucić klawiaturę, gdy użytkownik przesuwa palcem w dół, aby skupić się na czymkolwiek innym w interfejsie. Spojrzałem na tvos UIKit Catalog Apple'a, a ich przykład pokazuje UISearchController, który odrzuca klawiaturę podczas zmiany ostrości, ale nie widzę, żeby robili coś inaczej.

Oto kod używam ustawienia mojego UISearchController gdy użytkownik kliknie na przycisk:

@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) 
} 

Odpowiedz

4

Po dość trochę prób i błędów udało mi się wymyślić rozwiązanie.

Klawiatura automatycznie odwołać się tak długo, jak: 1) Rzecz użytkownik koncentruje się na to wewnątrz Scrollview 2) Wielkość zawartość Scrollview jest większa od wysokości ekranu przynajmniej 1px (1081px).

+0

Mam problem z tym problemem, zmiana wysokości zawartości przewijania nie naprawiła go dla mnie. W jaki sposób zorganizowałeś swoje kontrolery widoku? –

+0

@AaronStephenson Mam również do czynienia z tym samym problemem. Czy znalazłeś jakieś rozwiązanie tego problemu? –

3

Po dość długim okresie prób i błędów, w końcu się rozgryzłem. Powodem jest, że masz zagnieżdżone ScrollViews w searchResultsController.

"ScrollViews" z kursu zawiera UICollectionView, UITableView i UIScrollView.

Zgodnie z moim badaniem, UISearchController zachowuje się w następujący sposób.

  1. Jeśli pierwszy widok, który zostaje skoncentrowane w searchResultsController jest subview wewnętrznej Scrollview (która jest pozioma UICollectionView, w danym przypadku), a następnie nie dostaniesz klawiatura ukryta, jak oczekiwano.

  2. Co ciekawe, jeśli pierwszy widok, który się skupi w searchResultsController, jest podglądem zewnętrznego scrollView, wtedy klawiatura zostanie całkowicie ukryta, animowana, tak jak powinna (!).

Myślę, że jest to rodzaj błędu UIKit.

0

Miałem dokładnie taki sam układ i nie byłem w stanie tego osiągnąć. Wierzę, że zwracasz wartość false w tableView (tableView: UITableView, canFocusRowAtIndexPath indexPath: NSIndexPath) -> Bool, dzięki czemu każda komórka w widoku kolekcji może przewijać się poziomo z odpowiednim ustawieniem skupienia. Myślę, że to właśnie powoduje problemy. Jeśli zrobisz pierwszą komórkę w trybie ustawiania tabeli, problem zniknie, ale oczywiście zachowanie skupienia nie jest pożądane. Właśnie to odkryłem dzisiaj i spróbuję więcej jutro, aby dowiedzieć się, co mogę z tym zrobić. Wyczuwam, że potrzebuję nowego projektu, który pozwoli mi używać pojedynczego widoku kolekcji lub widoku tabeli, który ma komórki, które można skupić w narzędziu ResultsController. Mam nadzieję, że jest to łatwo osiągalne w tvOS 10.

0

Praca wokół rozwiązania: Dodaj jedną obojętną komórkę w indexPath.wiersz == 0 z wysokością 1 piksela i włącz skupienie.