私は、ユーザーがいくつかの情報を書かなければならないアプリケーションを開発しています。この目的のために、私UITextField
は複数行(一般的UITextField
には単一行)であるを必要とします。
私はグーグルをしているので、この目的UITextView
の代わりに使用するという答えを見つけました。UITextfield
私は、ユーザーがいくつかの情報を書かなければならないアプリケーションを開発しています。この目的のために、私UITextField
は複数行(一般的UITextField
には単一行)であるを必要とします。
私はグーグルをしているので、この目的UITextView
の代わりに使用するという答えを見つけました。UITextfield
UITextField
具体的には1行のみです。
Google検索は正しいので、複数行のテキストの表示と編集の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
あなたが作ったのとまったく同じエリアに を構築し、UITextField
その を削除しましたbackground color
。これで、複数の行があるように見えますTextField
!
複数行の動作に加えて、UITextView と UITextField の主な違いは、UITextView がプレースホルダーを提案しないことです。この制限を回避するには、「偽のプレースホルダー」を含む UITextView を使用できます。
詳細については、この SO の質問を参照してください: Placeholder in UITextView。
2 行のテキストを含む UITextField が必要な場合、1 つのオプションは、2 行目のテキストの UITextField のサブビューとして UILabel を追加することです。私は自分のアプリに UITextField を持っていますが、これはユーザーがタップして編集できることに気付かないことが多く、「タップして編集」という小さな字幕テキストを UITextField に追加したいと考えていました。
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 キーなど) が、それにテキストを追加することができます。内部にテキストが多すぎる場合は、上下にスクロールできます。
このリンクには、データを入力する画面の作成に関する情報があります。
私のために働いた別のオプションがあります:
UITextField をサブクラス化し、以下を上書きします。
- (void)drawTextInRect:(CGRect)rect
この方法では、たとえば次のことができます。
NSDictionary *attributes = @{ NSFontAttributeName : self.font,
NSForegroundColorAttributeName : self.textColor };
[self.text drawInRect:verticalAlignedRect withAttributes:attributes];
このコードは、rect に十分なスペースがある場合、必要な数の行を使用してテキストをレンダリングします。必要に応じて、他の属性を指定できます。
使用禁止:
self.defaultTextAttributes
1行のテキストレンダリングを強制します