- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
iOS8 的预测输入多次调用 UITextView
的以下委托(delegate)方法,导致所选单词被多次插入到 View 中。
此代码适用于键入单个字母和复制/粘贴,但在使用预测输入栏时无效;为什么不呢?
- (BOOL) textView:(UITextView*)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text
{
textView.text = [textView.text stringByReplacingCharactersInRange:range withString:text];
return false;
}
有了这段代码;如果我输入一个空的 UITextView 并点击预测文本(自动完成) View 中的“The”,它会通过对该方法进行三次调用将“The The”插入 View 。每次调用传入的参数是:
{0,0}
文本:@"The"
{0,0}
文本:@"The"
{3,0}
文本:@""
我能理解的空间;但为什么要插入两次“The”呢?
最佳答案
我遇到了同样的问题。对于预测文本,在该委托(delegate)方法中设置 textView.text 似乎会再次触发对该委托(delegate)方法的立即调用(据我所知,这仅发生在预测文本中)。
我通过用保护包围我的 textView 更改来修复它:
private var hack_shouldIgnorePredictiveInput = false
func textView(textView: UITextView!, shouldChangeTextInRange range: NSRange, replacementText text: String!) -> Bool {
if hack_shouldIgnorePredictiveInput {
hack_shouldIgnorePredictiveInput = false
return false
}
hack_shouldIgnorePredictiveInput = true
textView.text = "" // Modify text however you need. This will cause shouldChangeTextInRange to be called again, but it will be ignored thanks to hack_shouldIgnorePredictiveInput
hack_shouldIgnorePredictiveInput = false
return false
}
关于objective-c - 为什么使用预测输入会多次调用 shouldChangeTextInRange?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26482036/
我有一个UITextField我想使用正则表达式。我想使用 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRan
我有一个 UITextView,它有一个包含 4 个字符的空白字符串作为缩进的前缀。如果我输入大量文本然后按住退格键大约一秒钟,它会逐字逐句快速删除文本,但它也会删除我的“分隔符空格”,这会导致我的
iOS8 的预测输入多次调用 UITextView 的以下委托(delegate)方法,导致所选单词被多次插入到 View 中。 此代码适用于键入单个字母和复制/粘贴,但在使用预测输入栏时无效;为什么
我有以下 UISearchBar 委托(delegate)方法,它自己工作(它在单独时被调用)。 -(void)searchBarSearchButtonClicked:(UISearchBar *)
我使用自定义 UITextView,需要在返回点击时隐藏键盘。我需要捕获'ShouldChangeTextInRange'什么有textview,我不知道为什么但是 方法未被调用。这是我的 TextV
我在最新的 iOS 版本中看到 UITextView 的一个奇怪问题。根据我目前的理解,它仅发生在 iOS 13 中。我的一位用户在 iOS 12.4.1 上报告了此问题,但我无法在任何 iOS 13
我遇到了以下问题,不确定这是 iOS 错误,还是我误解了 UITextViewDelegate 回调。我能够在我的设备(iPad 视网膜)和模拟器上重现此行为仅当我使用软件键盘(即使用我的鼠标单击屏幕
我是 Swift 的新手,我有很多 RND,但我无法获得成功。我有用范围替换字符串我正在使用这段代码但是它的返回错误我正在使用 swift 2.0 let aString: String = txt_
这是我到目前为止所得到的。不确定为什么不调用此方法。 // viewDidLoad -> // textView?.delegate = self func textView(textView: UI
我想知道如何使用 shouldChangeTextInRange 创建 Firebase matchesRegex 查询 和列出当前结果。 我之前在 Parse 中做过,用于在 Parse Cloud
我想知道下面代码的工作原理。 - (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)ra
我需要在渲染之前捕获键入的文本,以便对其应用一些属性。 为此,我使用了 UITextView 的委托(delegate)方法 shouldChangeTextInRange 以及 NSAttribut
当使用外部键盘时,我的 UITextView 会在我按下 Backspace 键(“向后删除”)时触发 shouldChangeTextInRange 消息,但如果我按下 Delete ( "forw
我正在使用这段代码来设置我 View 中的 uitextview 的参数。 _textview=[[UITextView alloc]init]; [_textview setUserInteract
我使用 (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NS
我的一个项目中有一个相当复杂的 NSTextView 子类。我目前正在努力让查找/替换与内联查找栏(例如 Safari、Xcode)一起工作,并希望正确支持替换操作的撤消/重做。 我希望“全部替换”命
我正在尝试为 UITextView 实现字符计数器,但发现计数器在以下情况下不准确: 输入几个文本字符,例如“The” 点击返回 25 次 按住删除按钮删除文本(并按住直到光标到达顶部) 当光标到达顶
我有一个 UITextView,我正在将所有 TextView 更改事件记录到一个数组中。 当用户快速删除时(按住delete键一次删除一个单词而不是一个字符),当调用textView:shouldC
我是一名优秀的程序员,十分优秀!