13

に右側のビューを追加した後UITextField、右側のビューとクリア ボタンの両方を表示することを拒否していることがわかります (両方rightViewModeと にclearButtonMode設定されていUITextFieldViewModeAlwaysます)。正しいビューが表示されますが、クリア ボタンが表示されなくなりました。clearButtonRectForBoundsと を無効にすることで、それらが重複しないようにしclearButtonRectForBoundsました。そして、rightView の代わりに leftView を使用すると、そのような問題は発生せず、左ビューとクリア ボタンの両方が表示されます。

したがって、ドキュメントには記載されていないようですが、右のビューが表示されていない場合(およびテキストプロパティが空白文字列でない場合)にのみクリアボタンが表示されるように見えます。これは正しいですか、信頼できる回避策はありますか? それまでの間、UITextField だけから取得するものを取得するために、UITextField の上に右のビューをオーバーレイする UIView を作成する必要があると思います。

4

4 に答える 4

15

両方を同時に表示することはできませんが、このようにすることはできます

UITextField * textfield = [[UITextField alloc] initWithFrame:CGRectMake(10, 100, 300, 40)];

[textfield setBorderStyle:UITextBorderStyleRoundedRect];

UIImageView * imgvw = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"search.jpeg"]];

[imgvw setFrame:CGRectMake(0, 0, 30, 30)];

[textfield setRightView:imgvw];

[textfield setRightViewMode:UITextFieldViewModeUnlessEditing];

[textfield setClearButtonMode:UITextFieldViewModeWhileEditing];

[self.view addSubview:textfield];
于 2013-11-04T10:35:04.817 に答える
4

はい、あなたは正しいです。UITextfield には、左ビューと右ビューのようなプロパティがあります。クリアボタンを使用すると、rightview に重なってしまいます。

フォーム Apple doc http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UITextField_Class/Reference/UITextField.html

オーバーレイ ビューが他の兄弟ビューと重ならない場合、他のビューと同様にタッチ イベントを受け取ります。ビューにコントロールを指定すると、そのコントロールは通常どおりアクションを追跡して送信します。ただし、オーバーレイ ビューがクリア ボタンと重なっている場合は、クリア ボタンが常に優先されてイベントを受け取ります。デフォルトでは、右側のオーバーレイ ビューはクリア ボタンに重なっています。

しかし、名前が示すように、それはビューです。したがって、2 つのボタンを持つ独自のビューを作成し、テキスト フィールドの rightview を設定できます。必要に応じて、テキスト フィールドのデリゲート メソッドを使用して、ビューにボタンを表示したり非表示にしたりできます。

于 2012-08-03T12:58:33.810 に答える