tvOS UISearchController - 滚动时如何避免自动搜索栏和键盘隐藏行为?

Posted

技术标签:

【中文标题】tvOS UISearchController - 滚动时如何避免自动搜索栏和键盘隐藏行为?【英文标题】:tvOS UISearchController - how avoid automatic SearchBar & Keyboard hidden behavior when scroll? 【发布时间】:2020-05-14 15:34:43 【问题描述】:

在我的应用程序中,我按照为 Apple 提供的示例项目 UIKitCatalog 实现了 UISearchController,代码如下:

    /*
         A method demonstrating how to encapsulate a `UISearchController` for presentation in, for example, a `UITabBarController`
    */
    func packagedSearchController() -> UIViewController 
        // Load a `SearchResultsViewController` from its storyboard.
        let storyboard = UIStoryboard(name: "ViewControllerSamples", bundle: nil)
        guard let searchResultsController = storyboard.instantiateViewController(withIdentifier: SearchResultsViewController.storyboardIdentifier) as? SearchResultsViewController else 
            fatalError("Unable to instatiate a SearchResultsViewController from the storyboard.")
        

        /*
            Create a UISearchController, passing the `searchResultsController` to
            use to display search results.
        */
        let searchController = UISearchController(searchResultsController: searchResultsController)
        searchController.searchResultsUpdater = searchResultsController
        searchController.searchBar.placeholder = NSLocalizedString("Enter keyword (e.g. iceland)", comment: "")

        // Contain the `UISearchController` in a `UISearchContainerViewController`.
        let searchContainer = UISearchContainerViewController(searchController: searchController)
        searchContainer.title = NSLocalizedString("Search", comment: "")

        // Finally contain the `UISearchContainerViewController` in a `UINavigationController`.
        let searchNavigationController = UINavigationController(rootViewController: searchContainer)
        return searchNavigationController
    

此实现在我的应用程序中运行良好,但具有想要避免的 SearchBar 和键盘的自动隐藏行为,这可能吗?以及如何?

【问题讨论】:

你找到解决办法了吗?? 不,实际上我的 tvOS 应用程序存在这种行为。 对于其他页面,我可以接受 tvOS 的默认行为。但是对于我的应用程序的搜索页面,我不希望搜索栏和键盘自动隐藏。 Youtube 正在这样做。他们的搜索栏和键盘不会隐藏。我需要同样的行为 【参考方案1】:

我经常搜索这个问题,我发现的只是覆盖变量disablesAutomaticKeyboardDismissal: Bool并使其返回true,但它没有工作

对我来说唯一成功的解决方案是强制关注搜索栏

class CustomeSearchController : UISearchController 
    
    override var preferredFocusEnvironments: [UIFocusEnvironment]
        return [self.searchBar]
    
        
    override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) 
        self.view.setNeedsFocusUpdate()
        self.view.updateFocusIfNeeded()
    

希望对你有帮助

【讨论】:

但这会阻止其他元素获得焦点对吧?? @pgokul,不幸的是,是的,所以你需要检查didUpdateFocus 中的下一个元素是什么,并通过全局变量将preferredFocusEnvironments 传递给它,以防万一你想移动到那个元素,无论如何在我的项目中,我决定采用现有的行为,并在失去焦点时让它隐藏起来,因为即使使用这种解决方案,您也会面临一些故障,并且需要修复更多错误 @AhmedAdnanQazzaz 嗨,Ahmed,很高兴在那里见到你 :) 当包含 SearchController 时,如何避免在 SearchVC 上滚动时隐藏 Tabbar?

以上是关于tvOS UISearchController - 滚动时如何避免自动搜索栏和键盘隐藏行为?的主要内容,如果未能解决你的问题,请参考以下文章

tvOS 14.3 UISearchController:如何锁定显示

tvOS:一种让 UISearchController 不显示为按钮的方法?

在 tvos 中更改焦点时如何关闭 UISearchController 中的键盘?

tvOS UISearchController - 滚动时如何避免自动搜索栏和键盘隐藏行为?

使用 tableHeader TVOS 重新加载 tableView 时断言失败

tvOS:我们在哪里设置 tvOS 应用商店中显示的应用主题背景图像