ユーザーが情報を書き込む必要のあるアプリケーションを開発しています。この目的のために、UITextField
複数行である(通常UITextField
は単一行です)が必要です。
私がググリングしているときに、この目的UITextView
でUITextfield
はなくを使用するという答えを見つけます。
ユーザーが情報を書き込む必要のあるアプリケーションを開発しています。この目的のために、UITextField
複数行である(通常UITextField
は単一行です)が必要です。
私がググリングしているときに、この目的UITextView
でUITextfield
はなくを使用するという答えを見つけます。
回答:
UITextField
具体的には1行のみです。
あなたのグーグル検索は正しいです、あなたはマルチラインテキストの表示と編集のためにUITextView
代わりに使う必要がありUITextField
ます。
Interface Builderで、UITextView
必要な場所を追加し、「編集可能」ボックスを選択します。デフォルトでは複数行になります。
UITextViewを使用して、UITextFieldを偽造できます。発生する問題は、プレースホルダーの機能を失うことです。
UITextViewを使用することを選択し、プレースホルダーが必要な場合は、次のようにします。
viewDidLoadで、色とテキストをプレースホルダーに設定します。
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
次に、UITextViewが選択されたときにプレースホルダーを非表示にします。
func textViewDidBeginEditing (textView: UITextView) {
if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() {
myTxtView.text = nil
myTxtView.textColor = .white
}
}
ユーザーが編集を終えたら、値があることを確認します。ない場合は、プレースホルダーを再度追加します。
func textViewDidEndEditing (textView: UITextView) {
if myTxtView.text.isEmpty || myTxtView.text == "" {
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
}
}
偽造する必要のあるその他の機能:
UITextFieldは多くの場合、すべての文字を大文字にします。その機能をUITableViewに追加できます。
myTxtView.autocapitalizationType = .words
UITextFieldは通常はスクロールしません。
myTxtView.scrollEnabled = false
さて、私はいくつかのトリックでそれをしました;)最初にa UITextField
をビルドして、それを次のsize
ように増やしました:
CGRect frameRect = textField.frame;
frameRect.size.height = 53;
textField.frame = frameRect;
次にUITextView
、uが作成したのとまったく同じ領域にを作成し、UITextField
そのを削除しbackground color
ます。今それはあなたが複数の行を持っているようTextField
です!
UITextView
。UITextFieldの重要な点は、UITextFieldの動作がとは異なることUITextView
です。
UITextView
ありUITextfield
ます。それらは、UIScrollView
vs から継承、UIControl
デフォルトでは編集不可、デフォルトでは編集可能、複数行と単一行、異なるデリゲートプロトコル、プレースホルダーなしとプレースホルダーです。
UITextView
テキストの段落用です。テキストの段落が必要な場合に使用し、それ以外の場合は使用しないでください。
複数行の動作に加えて、UITextViewとUITextFieldの主な違いは、UITextViewがプレースホルダーを提案しないことです。この制限を回避するには、「偽のプレースホルダー」でUITextViewを使用できます。
詳細については、このSOの質問を参照してください:UITextViewのプレースホルダー。
2行のテキストを持つUITextFieldが必要な場合、1つのオプションは、2行目のテキストのUITextFieldのサブビューとしてUILabelを追加することです。アプリにUITextFieldがあり、ユーザーがタップしても編集できないことに気づかないことがよくあります。UITextFieldに「Tap to Edit」と書かれた小さな字幕テキストを追加したいと思いました。
CGFloat tapLlblHeight = 10;
UILabel *tapEditLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, textField.frame.size.height - tapLlblHeight - 2, 70, tapLlblHeight)];
tapEditLbl.backgroundColor = [UIColor clearColor];
tapEditLbl.textColor = [UIColor whiteColor];
tapEditLbl.text = @"Tap to Edit";
[textField addSubview:tapEditLbl];
はい、UITextViewはあなたが探しているものです。(returnキーのように)いくつかのことを異なる方法で処理する必要がありますが、それにテキストを追加できます。これにより、内部にテキストが多すぎる場合に上下にスクロールできます。
このリンクには、データを入力する画面の作成に関する情報があります。
上記のh4xxrの回答の補足として、UITextFieldの高さを調整する簡単な方法は、属性インスペクター->テキストフィールドで正方形の境界線スタイルを選択することです。(デフォルトでは、UITextfieldの境界線スタイルは楕円です。)
参照:ここでブライアンと回答:UITextFieldの高さを設定する方法?
私のために働いた別のオプションがあります:
UITextFieldをサブクラス化して上書き:
- (void)drawTextInRect:(CGRect)rect
この方法では、たとえば次のことができます。
NSDictionary *attributes = @{ NSFontAttributeName : self.font,
NSForegroundColorAttributeName : self.textColor };
[self.text drawInRect:verticalAlignedRect withAttributes:attributes];
このコードは、rectに十分なスペースがある場合、必要な数の行を使用してテキストをレンダリングします。必要に応じて、他の属性を指定できます。
使ってはいけません:
self.defaultTextAttributes
1行のテキストレンダリングを強制します