检测文本框内的位置和更改内容

如何检查我的textfieldDidChange方法中发生了什么变化?

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

所以想象我的用户决定编辑文本和链接标记而不是玛丽

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

我需要一个方法来检测@ Markus在文本字段中的变化,但不会改变string中的其他内容。 我能够检测到最后一个单词,第一个单词等等,但是它的重要性在于能够查看文本内部的变化

我在想一个方法

 a = "Hello how are you" b = newly changed text field c = ", nice day uh?" let str3 = a + b + c // More or less 

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

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

您可以使用它来监视用户的编辑。 但是,string很容易被改变,难以跟踪。 如果用户删除“你好,你好吗”部分? 如果他们把整个stringreplace成“closures你的食尸鬼,你恶臭的色狼”呢?

从文本字段获取整个string并parsing它可能会更好。 你可以接受任何用户input的内容,寻找和@ sign, and take everything after that until the next space as the name, eg @ alphanumerics`

编辑:

或者,您可以设置屏幕,使第一部分是标签,中间部分是可编辑的文本字段,最后一部分是另一个标签。 用户能够编辑的唯一部分是中间部分,名称。 或者你可以使它成为3个单独的文本字段,前缀,名称和后缀。 告诉用户你期望他们进入每个部分。

你可以使用这段代码拆分你的string。

对于对象c:

1.像这样创build函数。

  -(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.使用这个function。

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

然后在文本中的每一个变化,你可以检查子string,并将它们与原始的子string进行比较。