UITextField
の標準の高さよりも高い高さの複数行テキスト入力「ボックス」をユーザーに表示する必要があります。最良または最も正しいアプローチは何ですか?:
UITextField
を使用し、コードで高さを変更するか、特定の高さ制約を適用します。UITextView
を使用します。これは複数行ですが、デフォルトではプレースホルダーがありません。その機能をコードに実装する必要があると思います。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
を追加します。
オプション2を使用すると、textFieldの高さを変更できず、2行目が表示されません...
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 。
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
}
}
私は間違いなく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)
UITextField
を使用して複数行のテキストを実行することはできません。UITextView
を使用して、プレースホルダーロジックを実装する必要があります。