检测文本字段中的位置和更改

时间:2017-09-06 23:27:36

标签: ios swift uitextfield uitextfielddelegate

如何在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

2 个答案:

答案 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?"]

然后,文本中的每个更改,您都可以检查子字符串,并将它们与原始子字符串进行比较。