web-dev-qa-db-ja.com

複数行のUITextfieldを作成する方法

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

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

242
raaz

UITextFieldは特に1行のみです。

あなたのGoogle検索は正しいです、あなたはマルチテキストの表示と編集のためにUITextViewの代わりにUITextFieldを使う必要があります。

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

408
h4xxr

[OK]を私はいくつかのトリックでそれをやった;)最初にUITextFieldを構築し、このようにsizeを増やしました:

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

それからUITextViewを私のUITextFieldを作成したのと全く同じ領域に構築し、そのbackground colorを削除します。 uは複数行TextFieldを持っているようです。

20
Rudi

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
12
Dave G

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

詳細については、このSO質問を参照してください。 ITextViewのプレースホルダ

7
MonsieurDart

2行のテキストを持つUITextFieldが必要な場合は、2行目のテキストのUITextFieldのサブビューとしてUILabelを追加することができます。私は自分のアプリにUITextFieldをタップしても編集可能であることに気付かないことが多い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];
2
DiscDev

はい、UITextViewはあなたが探しているものです。リターンキーなど、いくつかの方法で対処する必要がありますが、テキストを追加することもできます。テキストが多すぎる場合は上下にスクロールできます。

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

データ入力画面を作成する

2
nevan king

uITextFieldの代わりにUITextViewを使用してください。

0
Monir Khlaf

上記のh4xxrの答えを補足するもので、UITextFieldの高さを調整するより簡単な方法は、属性インスペクタ - >テキストフィールドで四角形の境界線スタイルを選択することです。 (デフォルトでは、UITextfieldの境界線スタイルは楕円形です。)

参照:ここで答えたブライアン: どのようにUITextFieldの高さを設定するには?

0
Tony