iOS UITextField在文本更改时更改位置

时间:2012-12-17 16:24:05

标签: ios uitextfield

我使用它来将文本字段置于相关内容的中心位置:

[textField setCenter:[someObject center]];
[textField becomeFirstResponder];

这看起来很棒,漂亮并且以对象为中心,准备接受文本。我希望文本格式化,所以在编辑更改的处理程序中,我修改文本并设置为新文本:

[textField setText:newText];

当我这样做时,文本字段将从它居中之前跳转到旧位置。我希望文本字段在对象上保持居中。

我的经验是,有可能有更好的方法来做到这一点,即移动文本字段并动态更改其内容,而不必解决各种怪癖。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

要在编辑时格式化UITextField,可以尝试以下代码。

-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    if([string isEqualToString:@"4"]){
        UITextRange *range=textField.selectedTextRange;
        [textField replaceRange:range withText:@"Hi"];
        return NO;
    }
    return YES;
}

我保持UITextfield的中心对齐。当它在开始,中心或任何地方检测到“4”时,它将用“Hi”替换它,同时保持它的中心对齐行为。

答案 1 :(得分:1)

除上述代码外,还使用以下内容替换现有文本:

UITextPosition *p0 = [textField beginningOfDocument];
UITextPosition *p1 = [textField positionFromPosition:p0 offset:[[textField text] length]];
UITextRange *complete = [textField textRangeFromPosition:p0 toPosition:p1];
[textField replaceRange:complete withText:newText];

可怕的解决方案应该是一项简单的任务!