272

私は、ユーザーがいくつかの情報を書かなければならないアプリケーションを開発しています。この目的のために、私UITextFieldは複数行(一般的UITextFieldには単一行)であるを必要とします。

私はグーグルをしているので、この目的UITextViewの代わりに使用するという答えを見つけました。UITextfield

4

11 に答える 11

466

UITextField具体的には1行のみです。

Google検索は正しいので、複数行のテキストの表示と編集のUITextView代わりに使用する必要があります。UITextField

Interface Builderで、必要なUITextView場所を追加し、「編集可能」ボックスを選択します。デフォルトでは複数行になります。

于 2009-08-28T08:34:18.847 に答える
28

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
于 2016-05-12T12:36:37.473 に答える
19

わかりました私はいくつかのトリックでそれをしました;)最初に a を構築し、次UITextFieldのように増やしましたsize:

CGRect frameRect = textField.frame;
        frameRect.size.height = 53;
        textField.frame = frameRect;

次に、UITextViewあなたが作ったのとまったく同じエリアに を構築し、UITextFieldその を削除しましたbackground color。これで、複数の行があるように見えますTextField!

于 2012-11-20T15:27:04.137 に答える
9

複数行の動作に加えて、UITextView と UITextField の主な違いは、UITextView がプレースホルダーを提案しないことです。この制限を回避するには、「偽のプレースホルダー」を含む UITextView を使用できます。

詳細については、この SO の質問を参照してください: Placeholder in UITextView

于 2010-11-10T14:39:45.233 に答える
2

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];
于 2013-05-02T16:31:58.993 に答える
2

はい、あなたが探しているのは UITextView です。いくつかのことを別の方法で処理する必要があります (return キーなど) が、それにテキストを追加することができます。内部にテキストが多すぎる場合は、上下にスクロールできます。

このリンクには、データを入力する画面の作成に関する情報があります。

データ入力画面を作る

于 2009-08-28T08:32:29.443 に答える
-1

私のために働いた別のオプションがあります:

UITextField をサブクラス化し、以下を上書きします。

- (void)drawTextInRect:(CGRect)rect

この方法では、たとえば次のことができます。

    NSDictionary *attributes = @{ NSFontAttributeName : self.font,
                                  NSForegroundColorAttributeName : self.textColor };

    [self.text drawInRect:verticalAlignedRect withAttributes:attributes];

このコードは、rect に十分なスペースがある場合、必要な数の行を使用してテキストをレンダリングします。必要に応じて、他の属性を指定できます。

使用禁止:

self.defaultTextAttributes

1行のテキストレンダリングを強制します

于 2016-12-27T16:35:36.077 に答える