2

次のコードを使用して、テキスト フィールドを持つ UIAlertView を表示します。

UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:title message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Rename", nil];
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;

UITextField* textField = [alertView textFieldAtIndex:0];
textField.clearButtonMode = UITextFieldViewModeWhileEditing;

[alertView show];

結果は、iOS 5.1 では次のようになります。

ここに画像の説明を入力

iOS 6.1 の場合:

ここに画像の説明を入力

ご覧のとおり、クリア ボタンは iOS 6.1 の本来の位置よりも少し高くなっています。ボタンを適切に中央に配置する方法はありますか? 追加 textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;しても役に立ちません。

(どうやら、これは iOS 6.1 のバグですが、回避策を知っている人がいるかもしれません。また、アラート ビューのテキスト フィールドの高さも OS のバージョンによって異なるようですが、それは別の問題です。)

4

2 に答える 2

2

これは Apple のバグのように見えますが、次のようにして、textField に独自のクリア ボタンをいつでも追加できます。

最初に UITextField プロパティを作成します。

@property (nonatomic, strong) UITextField *textField;

そして、それをalertViewのtextFieldに割り当てます

UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:title message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Rename", nil];
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;

self.textField = [alertView textFieldAtIndex:0];
self.textField.delegate = self;

//Create a custom clear button
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 19, 19)];
[button setImage:[UIImage imageNamed:@"clearButton.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(clearText) forControlEvents:UIControlEventAllTouchEvents];

[self.textField setRightView:button];
self.textField.rightViewMode = UITextFieldViewModeAlways;

そして、clearText メソッドで、

- (void)clearText {
    [self.textField setText:@""];
}  

私はこれを試してみましたが、うまくいきます

お役に立てれば

于 2013-02-07T20:24:45.283 に答える