- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了以下问题,不确定这是 iOS 错误,还是我误解了 UITextViewDelegate 回调。我能够在我的设备(iPad 视网膜)和模拟器上重现此行为仅当我使用软件键盘(即使用我的鼠标单击屏幕键盘)时。
考虑以下人为设计的示例项目(更新于 2014 年 1 月 9 日): https://www.dropbox.com/s/1q3vqfnsmmbhnuj/AutocorrectBug.zip
这是一个简单的 UITextView,将 View Controller 设置为其委托(delegate),并具有以下委托(delegate)方法:
- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if ([text isEqualToString:@" "]
&& range.length == 0
&& (range.location == 0
|| [[textView.text substringWithRange:NSMakeRange(range.location-1, 1)] isEqualToString:@"\n"])) {
textView.backgroundColor = [UIColor yellowColor];
return NO;
}
return YES;
}
我对这段代码的意图是,当用户键入空格(编辑:并且该空格是该行的第一个字符)时,该空格将被忽略,取而代之的是发生一些其他功能,在在这种情况下,UITextView 变为黄色。
现在考虑这些步骤:
预期:黄色背景和文本阅读:
Apple
Apple
观察到:黄色背景和文本阅读(由于自动更正):
Apple
Apple
似乎自动更正逻辑忽略了 textView:shouldChangeTextInRange:replacementText: 的结果。
编辑 1/9/14:只有一行中的第一个空格应该被忽略,更多的空格应该被正常处理(即插入到文本中),排除空格的蛮力 strip 。此外,我在文本编辑器中处理一个大字符串(可能有数十万个字符)(意味着用户不断输入),因此每次击键时分析整个字符串的性能不会很好。
最佳答案
是的,我在我的 iPad 7.0.3 模拟器上也看到了。
解决它的一种方法是添加此 UITextViewDelegate
方法:
- (void)textViewDidChange:(UITextView *)textView
{
// eliminates spaces, including those introduced by autocorrect
if ([textView.text rangeOfCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]].location != NSNotFound) {
textView.text = [textView.text stringByReplacingOccurrencesOfString:@" " withString:@""];
}
}
似乎这个委托(delegate)方法是在自动更正之后被调用,只是在你想阻止的情况下(“Apple”变成“Apple”)替换文本是“Apple”而不是” “。因此,要修改实现以防止“\n”但允许文本中出现其他“”字符,您可以尝试将 text
的第一个字符与“”进行比较,而不是比较 text
到“”。
- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
// compare first character to 'space' character by decimal value
if (text.length && [text characterAtIndex:0] == 32) {
// check if previous character is a newline
NSInteger locationOfPreviousCharacter = range.location - 1;
if (locationOfPreviousCharacter < 0 || [textView.text characterAtIndex:locationOfPreviousCharacter] == 10) {
textView.backgroundColor = [UIColor yellowColor];
return NO;
}
}
return YES;
}
关于ios - textView :shouldChangeTextInRange:replacementText: returning NO, 但自动更正忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21007155/
我有一个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
我是一名优秀的程序员,十分优秀!