私の 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"
、の出現箇所を に置き換えてテキストを元に戻すことも忘れないでください。@" "