如何在textfieldDidChange方法中检查字符串的确切位置和位置?
let str1 = "Hello how are you @Marie, nice day uh?"
想象一下,我的用户决定编辑文本并链接markus而不是marie
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
答案 0 :(得分:0)
如果将视图控制器设置为文本字段的委托,则可以实现textField(_:shouldChangeCharactersIn:replacementString:)
委托方法。这将告诉您用户要求更改的字符范围,以及提供替换字符串。
您可以使用它来监控用户的编辑。但是,字符串很容易以难以跟踪的方式进行更改。如果用户删除了"你好,你怎么样"部分?如果他们用&#34替换整个字符串怎么办?关闭你的恶作剧@fred,你是恶臭的变态"?
你可能最好从文本字段中获取整个字符串并解析它。您可以接受用户输入的任何内容,并查看@ sign, and take everything after that until the next space as the name, e.g.
@ alphanumerics`
或者,您可以设置屏幕,使第一部分是标签,中间部分是可编辑的文本字段,最后一部分是另一个标签。用户能够编辑的唯一部分是中间部分,即名称。或者你可以创建3个单独的文本字段,前缀,名称和后缀。告诉用户您希望他们进入每个部分的内容。
答案 1 :(得分:0)
您可以使用此代码拆分字符串。
对于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?"]
然后,文本中的每个更改,您都可以检查子字符串,并将它们与原始子字符串进行比较。