检测文本字段中的位置和变化

Posted

技术标签:

【中文标题】检测文本字段中的位置和变化【英文标题】:detect where and what changes within textfield 【发布时间】:2017-09-06 23:27:36 【问题描述】:

如何在我的 textfieldDidChange 方法中检查字符串更改的确切内容和位置?

let str1 = "Hello how are you @Marie, nice day uh?"

假设我的用户决定编辑文本并链接标记而不是玛丽

let str2 = "Hello how are you @ Markus, nice day uh?"

我需要一种方法来检测文本字段中@Markus 的更改,但不会更改字符串中的任何其他内容。 我能够检测到最后一个词、第一个词等等,但重要的是还要查看文本中发生了什么变化

我正在考虑一种方法

a = "Hello how are you"
b = newly changed text field
c = ", nice day uh?"

let str3 = a + b + c // More or less 

也许我得到了我正在编辑的索引,在这个索引处取出单词——从左边空间到右边空间——然后把它剪掉? 在此先感谢,是的,我是初学者:P

【问题讨论】:

您可以在这里找到答案:***.com/questions/28394933/…。 这并不能回答我的问题,但谢谢 您可以将字符串拆分为子字符串,并在单独的数组中记住所有@Markus、@Maria 和其他链接某人的子字符串(我将它们称为提及字符串)。每次更改文本后,您都可以再次检查子字符串,并将它们与旧的提及字符串进行比较。 【参考方案1】:

如果您将视图控制器设置为文本字段的委托,则可以实现 textField(_:shouldChangeCharactersIn:replacementString:) 委托方法。这将告诉您用户要求更改的字符范围,并提供替换字符串。

您可以使用它来监控用户的编辑。但是,字符串很容易以难以跟踪的方式更改。如果用户删除“你好,你好吗”部分怎么办?如果他们将整个字符串替换为“闭嘴@fred,你这个恶臭的变态”会怎样?

您最好从文本字段中获取整个字符串并对其进行解析。您可以接受用户输入的任何内容,查找和@ sign, and take everything after that until the next space as the name, e.g. @alphanumerics`

编辑:

或者,您可以将屏幕设置为第一部分是标签,中间部分是可编辑的文本字段,最后一部分是另一个标签。用户可以编辑的唯一部分是中间部分,即名称。或者,您可以将其设为 3 个单独的文本字段,即前缀、名称和后缀。告诉用户您希望他们在每个部分中输入的内容。

【讨论】:

【参考方案2】:

您可以使用此代码拆分字符串。

对于 Objectve c:

1.像这样创建函数。

 -(NSString *)checkString:(NSString *)splitString

            NSRange firstObj = [splitString rangeOfString:@"@"];
            NSRange secondObject = [splitString rangeOfString:@","];
            NSRange rangeSubStr = NSMakeRange(firstObj.location + firstObj.length, secondObject.location - firstObj.location - firstObj.length);
            return [splitString substringWithRange:rangeSubStr];
 

2。像这样使用这个函数。

[self checkString:@"Hello how are you @Marie, nice day uh?"]

那么每次文本的变化,你都可以检查子串,和原来的子串进行比较。

【讨论】:

以上是关于检测文本字段中的位置和变化的主要内容,如果未能解决你的问题,请参考以下文章

Swift 检测 .xib 文件中文本字段的变化

Angular,打字稿更改检测输入文本[重复]

检测 UITextField 的焦点变化

如何使用 selenium 和 codeception 检测验收测试中的 dom 变化

JQuery:检测输入字段的变化[重复]

使用 MutationObserver 检测输入值变化