右揃えのUITextFieldのスペースバーでiOS 7のカーソルが進まない 質問する

右揃えのUITextFieldのスペースバーでiOS 7のカーソルが進まない 質問する

私の iPad アプリでは、UITextFields を使用した iOS 6 と iOS 7 の動作が異なることに気付きました。

UITextField を次のように作成します。

UIButton *theButton = (UIButton*)sender;
UITextField *textField = [[UITextField alloc] initWithFrame:[theButton frame]];

[textField setDelegate:self];
[textField setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
[textField setContentHorizontalAlignment:UIControlContentHorizontalAlignmentRight];

textField.textAlignment = UITextAlignmentRight;
textField.keyboardType = UIKeyboardTypeDefault;

...

[textField becomeFirstResponder];

iOS 6 では、「hello world」と入力し、「hello」の後にスペースバーを押すとカーソルが空白スペースに進みます。

iOS 7 では、スペースキーを押してもカーソルは進みません。ただし、「world」の「w」を入力すると、スペースと w が表示されます。

iOS 7 でスペースバーを押したときにカーソルを進めるにはどうすればよいですか?

アップデート:

textField.textAlignment を UITextAlignmentLeft に変更すると、iOS 7 でスペースが表示されます。可能であれば、右揃えを維持したいと思います。

ベストアンサー1

ちょっとしたハックになりますが、iOS6風にしたい場合は、スペースを改行なしスペース書かれているとおりです。扱いが異なります。サンプルコードは次のようになります。

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

通常のスペースを戻したい場合は、テキストフィールドから文字列を取得するときに@"\u00a0"、の出現箇所を に置き換えてテキストを元に戻すことも忘れないでください。@" "

おすすめ記事