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

Posted

技术标签:

【中文标题】tvOS:一种让 UISearchController 不显示为按钮的方法?【英文标题】:tvOS: A way to have UISearchController not appear as a button? 【发布时间】:2016-08-08 13:49:52 【问题描述】:

这段代码

var searchController: UISearchController!
@IBOutlet weak var collectionView: UICollectionView!

override func viewDidLoad() 
    super.viewDidLoad()

    searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.obscuresBackgroundDuringPresentation = false
    view.addSubview(searchController.searchBar)
    getItems()

产生这个: Screeshot1

请注意,searchBar 显示为卡在左上角的按钮(因为这是一个选项卡式应用程序,它在第一次出现时显示在选项卡栏下方。“按钮”按钮用于接收焦点以进行测试)。

这是按下按钮后的样子:Screenshot2

第二张图片显示了我希望搜索选项卡打开时的外观,以及我认为它在 tvOS 中的外观。

如何让 searchController 像第二个屏幕截图中那样显示?许多 tvOS 应用程序都这样做,所以我知道这一定是可能的。我已经仔细阅读了文档,但我一定漏掉了什么。

一个相关的问题是下面的collectionView 不会从searchController 获得焦点。必须使用远程菜单按钮返回以使 collectionView 获得焦点。

当视图出现时,如何让 searchController 像第二个屏幕截图中那样显示?

如何让 collectionView 从 searchController 获得焦点,而不必返回标签栏?

【问题讨论】:

添加 self.searchController.searchBar.frame = CGRectMake(960-(self.searchController.searchBar.frame.size.width/2), 200, self.searchController.searchBar.frame.size.width, 44.0) 会从 tabBar 下取出按钮,但生成的 UI 是一个破坏 tvOS 界面逻辑的杂物(在我看来)。 【参考方案1】:

是不是我终于在 tvOS 开发者库里看到了这段话

所有 ios 第一响应者机制都适用于 tvOS。这允许 开发人员呈现一个可见或隐藏的 UI,然后制作其中之一 文本字段通过调用 becomeFirstResponder 方法就可以了。此操作会导致文本字段 无需用户导航到 文本字段并单击它。

所以,添加

searchController.searchBar.becomeFirstResponder()

显示我希望用户开始使用的内联键盘。然而,在焦点引擎再次启动之前,必须按下遥控器上的菜单按钮。菜单按钮也会关闭键盘并且 searchBar 返回到它的按钮状态。

这是我第一个问题的答案。对第二个仍然一无所知。

【讨论】:

以上是关于tvOS:一种让 UISearchController 不显示为按钮的方法?的主要内容,如果未能解决你的问题,请参考以下文章

一种让 webapp 监听服务器的方法 [重复]

tvOS 中的一种方式 Segue

一种让不和谐机器人在设定的时间发送私人消息的方法?

技术债务墙:一种让技术债务可见并可协商的方法

翻译: 技术债务墻:一种让技术债务可见并可协商的方法

一种让超大banner图片不拉伸全屏宽居中显示的方法