Rightalignment UITextfield 的光标在输入 space 后向左移动

Rightalignment UITextfield's cursor go left after enter a space

  1. 我将我的 UITextfield 设置为 NSTextAlignmentRight ,它的光标正常位于右端。

  2. 当我输入 space 时,光标移动到 UITextfield 的左端。

  3. 我尝试通过实施 UITextFieldDelegate 方法

  4. 来解决这个问题

像这样:

#pragma mark - UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  if (range.location == 0 && [string isEqualToString:@" "]) {
    return NO;
  }
return YES;
}

但是有点乱,第一个字输入不了space。

是否有更好的解决方案来解决这个问题?
为什么会出现这个错误?

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    // only when adding on the end of textfield && it's a space
    if (range.location == textField.text.length && [string isEqualToString:@" "]) {
        // ignore replacement string and add your own
        textField.text = [textField.text stringByAppendingString:@"\u00a0"];
        return NO;
    }
    // for all other cases, proceed with replacement
    return YES;
}

如果不清楚,textField:shouldChangeCharactersInRange:replacementString: 是一个 UITextFieldDelegate 协议方法,因此在您的示例中,上述方法将在 [textField setDelegate:self] 指定的 viewcontroller 中.

如果您想要恢复常规空格,显然还需要记住在从文本字段中获取字符串时将出现的 @"\u00a0" 替换为 @" " 来转换回文本

供参考: Right aligned UITextField spacebar does not advance cursor in iOS 7