我正在为键入UITextField
。
例如,如果文本字段已经包含“a”并且在其后面键入另一个“a”,我将用“ä”替换它。在另一种情况下,如果他键入“a”,然后键入“b”,我将其替换为“XYZ”。如果文本包含两个连续的空格,我想用一个空格替换它们。
因此,根据用户输入的内容,我可能会用更长,更短或相同长度的文本替换它。
简单方法是实现[UITextFieldDelegate textField: shouldChangeCharactersInRange: ...
委托功能,将替换文本分配给textField.text
,然后返回NO。
但这也需要相应地调整光标位置,这就是我正在努力的一点点。
我正在处理这个“手动”定位的光标。它有点难看,所以我想知道是否有更优雅的解决方案。毕竟,在替换文本之后处理光标位置的所有代码(例如,当选择,然后粘贴时)已经在UITextField
代码中实现。我只是想知道是否有更多的东西暴露在我的需求之中,而我还没有找到它。
答案 0 :(得分:1)
我真的认为你不需要textField:shouldChangeCharactersInRange:replacementString:
。有一种简单的方法可以解决您的要求,解决方案没有光标问题。
您应该在viewDidLoad
中添加此行代码(self.textField
是您的UITextField
):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shortcut:) name:UITextFieldTextDidChangeNotification object:self.textField];
然后,你应该添加选择器,例如:
- (void) shortcut: (NSNotification*) notification
{
UITextField *notificationTextField = [notification object];
if (notificationTextField == self.textField)
{
[self checkDoubleA:notificationTextField];
[self checkDoubleAB:notificationTextField];
[self checkDoubleSpace:notificationTextField];
}
}
然后你只需要添加3种方法来检查你的快捷方式:
-(void) checkDoubleA: (UITextField*) textField
{
NSMutableString *string = [textField.text mutableCopy];
NSRange range = [string rangeOfString:@"aa"];
if (range.location == NSNotFound)
{
NSLog(@"string was not found");
}
else
{
[string replaceCharactersInRange:range withString:@"ä"];
}
textField.text = string;
}
-(void) checkDoubleAB: (UITextField*) textField
{
NSMutableString *string = [textField.text mutableCopy];
NSRange range = [string rangeOfString:@"ab"];
if (range.location == NSNotFound)
{
NSLog(@"string was not found");
}
else
{
[string replaceCharactersInRange:range withString:@"XYZ"];
}
textField.text = string;
}
- (void) checkDoubleSpace: (UITextField*) textField
{
NSMutableString *string = [textField.text mutableCopy];
NSRange range = [string rangeOfString:@" "];
if (range.location == NSNotFound)
{
NSLog(@"String was not found");
}
else
{
[string replaceCharactersInRange:range withString:@" "];
}
textField.text = string;
}
您可以下载此代码here的演示。