问题标签 [uiinputviewcontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2470 浏览

ios - 在 Swift 中为 UITextField 创建自定义输入

我正在用 Swift 语言编写一个 iOS 应用程序,我所要做的就是为文本字段创建一个自定义输入。

我创建了一个带有两个按钮的附加视图控制器,我想要的是这个视图控制器(而不是键盘)在我突出显示我的文本字段时弹出。
基本上我想要的是创建一个小的自定义键盘,但我只是希望它在我的应用程序中:我找到了很多关于创建自定义键盘的教程,但这与有一个简单的视图控制器不同时弹出文本字段突出显示。

你能建议如何textField.inputViewController在 Swift 中分配我的视图控制器吗?

谢谢

0 投票
0 回答
59 浏览

ios - 我可以在 UIInputviewcontroller 中使用 PFquery,它是键盘扩展的类

我在键盘视图中构建了一个底部,它会生成一个 PFquery;然后通过 [self.textDocumentProxy insertText: str] 将此查询到的字符串插入到文本字段中。但是,当我单击此按钮时,键盘会跳到下一个键盘模式。请帮忙!谢谢,圣诞快乐。

0 投票
1 回答
138 浏览

ios8 - 自定义键盘iOS8非英文字符

我正在尝试为 iOS8 创建缅甸语键盘。而且我不知道如何让 iOS 知道这些角色。我在 safari 中显示了我的自定义键盘,但是当我尝试书写时,它显示为“?” 只要。到目前为止,我已经尝试过 unicode。并且不明白如何从这里开始。

0 投票
1 回答
16886 浏览

ios - Swift 必须调用超类 uiinputviewcontroller 的指定初始化器

今天早上升级到 8.3 后,我得到了这个主题的错误。

下面的代码曾经完美地工作,但它不再编译了。你们中的任何人都可以帮助我吗?

0 投票
1 回答
698 浏览

ios - 关闭键盘后如何恢复 UIInputViewController self.view?

我正在开发一个具有键盘扩展的应用程序,在键盘扩展的某些用途中(例如:当我使用切换键盘按钮时)扩展正在通过viewDidDisappear并且在这种情况下我知道我可以清理键盘和它的所有视图都被释放,内存被释放。在其他用途​​(例如:当使用 Notes 应用程序并按下 Done/Back 按钮时)扩展程序正在通过viewWillDisappear但不通过viewDidDisappear,所以在这种情况下,我没有清洁键盘,因为它没有达到我的清洁方法,因此它没有被释放。

在这一点上,我希望当我通过返回到笔记返回键盘时,我会收到之前的UIInputViewController以及我已经构建的视图。

不幸的是,此时isViewLoaded()方法返回false并且我的UIInputViewController再次通过 loadView 方法,因此重新构建所有视图,结果应用程序内存增长,直到在某个时候我到达讨厌的didReceiveMemoryWarning方法回调。

我想以某种方式恢复我在首先初始化的UIInputViewController中为我的键盘创建的视图。有人知道这是否可能以及如何实现?

我正在研究restoreIdentifier来完成这项任务,如果我错了,请纠正我,但这是与普通UIViewController一起使用的,并且不能与UIInputViewController一起使用,因为不是我的 AppDelegate 负责启动它。

更新

从我所做的进一步研究中,我得出一个结论,无论您执行什么操作:

  1. 使用 Notes 应用程序中的完成/返回按钮。
  2. 切换到消息应用程序并在那里使用键盘。
  3. 使用“切换键盘”按钮

和其他场景一样,UIInputViewController 类总是通过 init 方法

根据我对面向对象编程的理解,这意味着无论谁调用我的键盘来收割,都会使用构造函数来完成它,并且基本上会创建一个新的键盘实例。这意味着我永远不会在任何行为中第一次重新出现键盘时获得可用视图,并且我总是必须为新实例构建键盘视图并清理旧实例。这是正确的吗?还是有办法保留 UIInputViewController 的视图?

0 投票
1 回答
173 浏览

ios - UIInputViewController - 根据容器应用程序中的用户输入禁用键

因此,假设我有一个容器应用程序和该应用程序的扩展以用于自定义键盘。假设自定义键盘默认有 5 个键。这些键是什么无关紧要。

现在,我希望用户能够禁用容器应用程序中的 5 个键中的任何一个。如果在容器应用程序中禁用,键应显示为红色并在键盘中禁用。

我的问题是:如何将容器应用程序中的用户首选项/序列化数据加载到 UIInputViewController 中?

如果有人可以帮助完成实现这一目标的必要步骤,或提供教程链接(我似乎找不到),将不胜感激。

0 投票
1 回答
277 浏览

ios - 如何测试用户是否更改了 UITextInput?

我正在为 iOS 开发一个自定义键盘,使用 UIInputViewController 我实现了以下方法:textWillChangetextDidChange

我想知道用户何时更改当前文本字段并移动到另一个文本字段以配置键盘中当前按下的文本字段的自动大写参数。

现在我尝试做这样的事情:

甚至是这样的:

但是这些选项都不适合我。

更新:您可以注意到我在回调方法中收到的对象不是 UITextField 对象,而是 UITextInput 对象,它实际上是一个协议,而不是文本字段本身。所以我不能添加观察者。我的键盘应用程序不控制用户输入文本的字段。

问题:如何识别用户更改当前文本字段的那一刻?

0 投票
2 回答
1021 浏览

ios - 从 UIInputViewController 显示全屏视图控制器

我目前正在通过扩展为 iOS 8 构建自定义键盘。当用户在键盘视图上按下某个按钮时,我想呈现一个全屏模式视图控制器。当我尝试呈现视图控制器时,它会尝试呈现在键盘视图的范围内。我正在使用[self presentViewController:animated:completion:]实例化的视图控制器。无论如何要呈现全屏视图控制器吗?类似于照片编辑扩展(显示全屏视图控制器)

谢谢

0 投票
0 回答
1362 浏览

ios - iOS 8 键盘扩展:UIInputViewController textDocumentProxy 连接无效

在 iOS 8 键盘扩展上,我添加了一个UITextField,以便用户能够在键盘内搜索表情符号或其他元素。

在用户正在键入的情况下,例如在 Notes.app 中,用户点击键盘扩展上的搜索字段开始搜索。点击后,扩展程序会记录:

-[UIKeyboardInputManagerClient handleError:forRequest:] 将在收到错误 Domain=NSCocoaErrorDomain Code=4099 "The operation could not be completed. (Cocoa error 4099.)" 后重试发送 syncToKeyboardState:completionHandler: 到键盘守护进程(连接到名为 com 的服务.apple.TextInput 无效。) UserInfo=0x170276e00 {NSDebugDescription=与名为 com.apple.TextInput 的服务的连接无效。}

请检查 kbd 崩溃日志。-[UIKeyboardInputManagerClient handleError:forRequest:] 在连续两次发送失败后关闭与键盘守护进程的连接

在此之后,用户点击 Notes.app 文本以返回编辑它。现在使用发送到 textDocumentProxy 的任何文本insertText:仍然会转到我的键盘扩展UITextField而不是 Notes.app 文本。

textDidChange:点击它时,仍会从 Notes 文本中调用委托方法。此外,textDocumentProxys 属性documentContextBeforeInputdocumentContextAfterInput包含来自 Notes.app 文本的正确文本。

看起来UITextField现在是 textDocumentProxy 的“侦听器”,但它不应该是。

我试过了,没有成功:

  • 设置userInteractionEnabled = NOUITextField
  • resignFirstResponderUITextField
  • endEditing:YESUITextField
  • 监视textDocumentProxy属性的更改,但它一直引用同一个对象。

一种解决方法是选择另一个键盘,然后返回我的键盘。然后连接恢复,一切恢复正常。(直到用户再次点击我的 UITextField)。

在 App Store 中,我发现了几个具有相同问题的自定义键盘应用程序。这使我认为这是无法解决的。但是,我还发现自定义键盘应用程序运行良好,用户可以毫无问题地在文本字段中跳转。

有任何想法吗?

0 投票
0 回答
399 浏览

ios - 在 Swift 中,NSDictionary(contentOfFile:) 有时会返回 nil

我正在开发 iOS 键盘扩展,我从 plist 文件中加载了一些键盘数据。我的版本是 iOS 8.4/Xcode 6.4。

但有时(不是每次),当 in viewdidloadof时InputViewControllerNSDictionary(contentsOfFile:)返回 nil。当我经常在键盘和另一个键盘之间切换时出现。

我检查了什么:

  • 该文件不是零。
  • 文件名根本没有改变。
  • 当它为零时再试一次。
  • contentsOfUrl 而不是文件路径。
  • plist 文件中只有 ascii 代码。

我怀疑的是:

  • 进程未正确结束时的文件 io 问题。
  • 快速的问题

感谢 Aderstedt,我检查了 NSError。

load error: Optional("Error Domain=NSCocoaErrorDomain Code=256 \"操作无法\U2019t完成。(NSCocoaErrorDomain error 256.)\" UserInfo=0x17066c700 {NSFilePath=/private/var/mobile/Containers/Bundle/Application/ "我的应用程序", NSUnderlyingError=0x174845df0 \"无法完成操作\U2019。(NSPOSIXErrorDomain 错误 24 - 打开的文件太多)\"}")

我通过关闭其他关闭垃圾文件来解决此问题,以下链接也很有帮助。

在 iOS/iPhone 上:“打开的文件太多”:需要列出打开的文件(如 lsof)