2011-08-12 3 views
0

私のカスタムテーブルのセルでは、 "自分の名前を入力する"のような私のUITextFieldにデフォルトのテキストをいくつか表示したいと思います。デフォルトのテキストが終了するところで編集が開始されます。これは簡単にできますか?iPhone:UITextFieldのデフォルトのテキストの問題

私は、ラベルを左側に、テキストフィールドを右側に置くことでこれを行うことができますが、次に、デフォルトテキスト(各フィールドごとに異なる可能性があります)とカスタムがテキストフィールドを作成する度に計算する必要がありますその長さに収まる。

何か提案がありますか?

答えて

1

サイズを計算するラベルがあります。ラベルのテキストを設定し、ラベルのサイズを合わせてから、ラベルの端までUITextFieldをスライドさせます。ラベルのテキストにスペースが残っているとすばらしく見えます。このような

何か:そのような追加のコードを追加する必要があります非常に長いラベルのような特殊なケースでは:

UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 550.0, 28.0)]; 
[nameLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:24.0]]; 
[nameLabel setText:@"Name: "]; 
[nameLabel sizeToFit]; 
[self addSubview:nameLabel]; 
[nameLabel release]; 
UITextField *nameTextField = [[UITextField alloc] initWithFrame:CGRectMake(nameLabel.frame.size.width + nameLabel.frame.origin.x, 0.0, 550.0 - nameLabel.frame.size.width, nameLabel.frame.size.height)]; 

編集は特殊なケースについてのコメントにお答えします。たとえば、sizeToFitコールの後で幅を確認し、一定の幅を超える場合は、複数の行、小さいフォントなどでラベルを再構築します。残念ながら、特殊なケースを考慮する必要がある場合は、コーディング作業。

+0

tnxこれは非常に役に立つと思われますが、ラベルテキストが非常に長く、テキストやテキストの入力にスペースを許すようにフォントや調整行を調整したい場合はどうしたらいいですか? – Spring

+0

このラベルをnibでデザインし、コードで上書きすることはできますか? – Spring

+1

はい、Interface Builderでインターフェイス要素を設定し、IBOutletsに接続する限り、setFrameやsizeToFitなどのコードでインターフェイス要素を調整できます。 –

1

UITextFieldを使用しているため、UITextFieldDelegatedelegate methodsにフックして、さまざまな状態のテキストフィールドのテキストを確認できます。たとえば、UITextFieldが編集可能になったとき、およびテキストフィールドのテキストが変更されたとき。あなたが興味があるかもしれない

2は、次のとおりです。

これらを使用して
- (void)textFieldDidBeginEditing:(UITextField *)textField 
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

ユーザーがフィールドを編集し始めたとき、あなたは簡単に、その後、UITextFieldplaceholderプロパティは、あなたが使用したいものは何でもテキスト含めることができますtextFieldDidBeginEditing:にテキストフィールドのテキストにプレースホルダテキストを入力してから、ユーザが入力したすべての文字のテキストをtextField:shouldChangeCharactersInRange:replacementString:で監視して、入力したプレースホルダテキストを手動で削除しないようにします。

+0

ここで述べた2番目の方法だけでは十分ではないのはなぜですか? – Spring

+1

最初のデリゲートメソッドを使用すると、プレースホルダテキスト(グレーアウトされたテキスト)をテキストフィールドの実際のテキストに置き換えることができます。 2番目のデリゲートメソッドは、ユーザーが最初にデリゲートメソッドを使用して手動で入力したテキストを削除することを防ぎます。これは、達成しようとしていると思われる結果です。 – larsacus

関連する問題