检测文本字段中的位置和变化
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?"]
那么每次文本的变化,你都可以检查子串,和原来的子串进行比较。
【讨论】:
以上是关于检测文本字段中的位置和变化的主要内容,如果未能解决你的问题,请参考以下文章