web-dev-qa-db-ja.com

iOSでの複数行のユーザー入力:UITextFieldとUITextView

UITextFieldの標準の高さよりも高い高さの複数行テキスト入力「ボックス」をユーザーに表示する必要があります。最良または最も正しいアプローチは何ですか?:

  1. UITextFieldを使用し、コードで高さを変更するか、特定の高さ制約を適用します。
  2. 編集可能なUITextViewを使用します。これは複数行ですが、デフォルトではプレースホルダーがありません。その機能をコードに実装する必要があると思います。
34
AppsDev

UITextFieldは、特に1行のみです。

複数行テキストの代わりにUITextViewを使用します。

UITextViewにプレースホルダーを実装するには、このロジック/コードを使用します。

最初にUITextViewをプレースホルダーテキストを含むように設定し、薄い灰色に設定してUITextFieldのプレースホルダーテキストの外観を模倣します。 viewDidLoadで行うか、テキストビューの作成時に行います。

Swiftの場合

textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()

Objective-Cの場合

textView.text = @"Placeholder";
textView.textColor =[UIColor lightGrayColor];

次に、ユーザーがテキストビューの編集を開始するときに、テキストビューにプレースホルダーが含まれている場合(つまり、テキストの色が明るい灰色の場合)、ユーザーの入力に対応するためにプレースホルダーテキストをクリアし、テキストの色を黒に設定します。

Swiftの場合

func textViewDidBeginEditing(textView: UITextView) {
    if textView.textColor == UIColor.lightGrayColor() {
        textView.text = nil
        textView.textColor = UIColor.blackColor()
    }
}

Objective-Cの場合

- (BOOL) textViewShouldBeginEditing:(UITextView *)textView
{
    if (textView.textColor == [UIColor lightGrayColor]) {
        textView.text = @"";
        textView.textColor = [UIColor blackColor];
    }

    return YES;
} 

次に、ユーザーがテキストビューの編集を終了し、最初のレスポンダーとして辞任したときに、テキストビューが空の場合、プレースホルダーテキストを再度追加し、色を明るい灰色に設定してプレースホルダーをリセットします。

Swiftの場合

func textViewDidEndEditing(textView: UITextView) {
    if textView.text.isEmpty {
        textView.text = "Placeholder"
        textView.textColor = UIColor.lightGrayColor()
    }
}

Objective-Cの場合

- (void)textViewDidEndEditing:(UITextView *)textView{
    if ([textView.text isEqualToString:@""]) {
        textView.text = @"Placeholder";
        textView.textColor =[UIColor lightGrayColor];
    }
}

また、View ControllerにUITextViewDelegateを追加します。

79

オプション2を使用すると、textFieldの高さを変更できず、2行目が表示されません...

PLACEHOLDER LOGIC:

textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()

func textViewDidBeginEditing(textView: UITextView) {
    if textView.textColor == UIColor.lightGrayColor() {
        textView.text = nil
        textView.textColor = UIColor.blackColor()
    }
}
func textViewDidEndEditing(textView: UITextView) {
    if textView.text.isEmpty {
        textView.text = "Placeholder"
        textView.textColor = UIColor.lightGrayColor()
    }
}

From Text View Placeholder Swift

9
Mr. Xcoder

For Swift

UITextViewには本質的にプレースホルダープロパティがないため、UITextViewDelegateメソッドを使用してプログラムで作成および操作する必要があります。

(注:クラスにUITextViewDelegateを追加し、textView.delegate = selfを設定します。)

最初にUITextViewにプレースホルダーテキストを含めるように設定し、UITextFieldのプレースホルダーテキストの外観を模倣するように明るい灰色に設定します。 viewDidLoadで行うか、テキストビューの作成時に行います。

textView.text = "Placeholder"
textView.textColor = UIColor.lightGray

次に、ユーザーがテキストビューの編集を開始するときに、テキストビューにプレースホルダーが含まれている場合(つまり、テキストの色が明るい灰色の場合)、ユーザーの入力に対応するためにプレースホルダーテキストをクリアし、テキストの色を黒に設定します。

func textViewDidBeginEditing(_ textView: UITextView) {
    if textView.textColor == UIColor.lightGray {
        textView.text = nil
        textView.textColor = UIColor.black
    }
}

次に、ユーザーがテキストビューの編集を終了し、最初のレスポンダーとして辞任したときに、テキストビューが空の場合、プレースホルダーテキストを再度追加し、色を明るい灰色に設定してプレースホルダーをリセットします。

func textViewDidEndEditing(_ textView: UITextView) {
    if textView.text.isEmpty {
        textView.text = "Placeholder"
        textView.textColor = UIColor.lightGray
    }
}

3
Naveen Kumar M

私は間違いなくUITextViewと一緒に行きます。プレースホルダーテキストを設定する場合は、UITextView+Placeholderで簡単に設定できます。を使用してインストールできます

pod 'UITextView+Placeholder', '~> 1.2'

あなたのポッドファイルで。これでヘッダーをインポートできます

#import <UITextView+Placeholder/UITextView+Placeholder.h>

プレースホルダーを簡単に設定できます。

UITextView *textView = [[UITextView alloc] init];
textView.placeholder = @"How are you?";
textView.placeholderColor = [UIColor lightGrayColor]; // optional
textView.attributedPlaceholder = ... // NSAttributedString (optional)
1
Rains

UITextFieldを使用して複数行のテキストを実行することはできません。UITextViewを使用して、プレースホルダーロジックを実装する必要があります。

1
venky