gpt4 book ai didi

swift - UITextField 的键盘是否必须占据整个屏幕?

转载 作者:IT王子 更新时间:2023-10-29 05:21:28 25 4
gpt4 key购买 nike

键盘似乎不必占据整个屏幕,请查看我帖子的“问题”部分中的更新。谢谢。

描述

Use UITextField to place a full-screen keyboard on the screen.

reference

我已经设置了一个 UISplitViewController,我希望 RootViewController(又名 MasterViewController)拥有 UITextField 显示键盘。然后我想要右侧的搜索结果(在“ResultViewController”(UIViewController)中)。

这个想法是当用户输入时,建议结果。

我尝试过的:

我首先通过 storyboard 添加了一个 UITextField 到我的 RootViewController 但是当我通过 激活键盘时它占据了整个屏幕>textField.becomeFirstResponder().

我想如果我使用 UIAlertController 我会解决这个问题,但键盘仍然占据了整个屏幕。

class RootViewController: UIViewController {

override func viewDidLoad() {

let alertController = UIAlertController(title: "Search", message: "Search for something!.", preferredStyle: UIAlertControllerStyle.Alert)

alertController.addTextFieldWithConfigurationHandler({(textField: UITextField!) in
textField.placeholder = "Search"
})
self.addChildViewController(alertController)
alertController.view.frame = self.view.frame
self.view.addSubview(alertController.view)
}
}

问题:

当使用 UISplitViewController 时,如何让键盘只停留在 RootViewController 中而不占据整个屏幕?

更新:这似乎已在新 apple tv 的 Netflix 应用程序中实现。键盘在顶部,占据了整个宽度。底部分为两部分。左边是建议的单词结果,右边是可能视频的视频封面 Collection View 。一切都随着用户输入而更新。

如果这被认为是 Apple TV 的糟糕设计,请随时指出原因。

屏幕截图:

这是我目前得到的。文本框会打开一个占据整个屏幕的键盘。

enter image description here

最佳答案

使用内置 SDK 方法无法仅在屏幕的一部分显示键盘。

UIKeyboard 出现在应用程序的窗口上,而不是出现在它的任何 subview 上。要完成您想要的行为,请使用反射获取对应用程序 UIWindow 上的 UIKeyboard 对象的引用(通过遍历窗口的 subview ),并更改其框架以匹配RootViewController 的宽度。

首先,您可以查看私有(private) UIKeyboard.h tvOS header here .我应该注意到,Apple 可能有适当的代码来禁用调整键盘大小(例如 willMoveToWindow:didMoveToWindow)。这是未定义的行为,您的里程数会有所不同,即使它完全有效。

您已经删除了对我关于 Netflix 应用程序的回答的评论,但正如 shirefriendship 在他们的回答中所说,Netflix 可能使用了 TVML 模板。你可以走那条路,构建一个混合的 tvOS/TVML 应用程序。此外,您还可以在 RootViewController 中使用 UICollectionView 自己手动构建键盘。

关于swift - UITextField 的键盘是否必须占据整个屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com