文本更改时,iOS UITextField会更改位置

文本更改时,iOS UITextField会更改位置,ios,uitextfield,Ios,Uitextfield,我使用此选项将文本字段置于相关内容的中心: [textField setCenter:[someObject center]]; [textField becomeFirstResponder]; 这看起来很棒,并且位于对象的中心,可以接受文本。我希望文本以某种方式格式化,因此在编辑更改处理程序中,我修改文本并设置为新文本: [textField setText:newText]; 当我这样做时,文本字段将从居中之前跳转到原来的位置。我希望文本字段保持在对象的中心 我的经验是,可能有更好的方

我使用此选项将文本字段置于相关内容的中心:

[textField setCenter:[someObject center]];
[textField becomeFirstResponder];
这看起来很棒,并且位于对象的中心,可以接受文本。我希望文本以某种方式格式化,因此在编辑更改处理程序中,我修改文本并设置为新文本:

[textField setText:newText];
当我这样做时,文本字段将从居中之前跳转到原来的位置。我希望文本字段保持在对象的中心


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

在编辑时格式化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;
}

我保持了场地的中心对齐。当它在起点、中心或任何位置检测到“4”时,将用“Hi”替换它,同时保持其中心对齐行为。

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

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];

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

只是一个想法,但是你在使用自动布局吗?如果是这样的话,试着关闭它,看看bug是否还在发生。有没有办法只为控件关闭自动布局?没有,这是每个xib文件的设置。好的,我找到了一个解决方案,使用replaceRange:withText:和UITextPosition以及uitextange类,并将其设置为第一响应程序,也许在那里的某个地方梨树上也有一只鹧鸪。关闭自动布局对我来说很有用。谢谢@AmyWorrall.confirm using setText:它仍然会移动文本字段。它可能适用于replaceRange,但我需要完全更改文本,而不仅仅是替换范围。更深入地研究它,它似乎难以置信地困难:创建包含整个字符串的uitextange没有简单的方法,需要为uitextange和UITextPosition两个类划分子类,textField需要是第一个响应者。即使在我做了所有这些之后,我仍然不知道文本字段是否会移动。