web-dev-qa-db-ja.com

UITextviewにUITextFieldのようなプレースホルダープロパティがない理由

こんにちは私はiPhoneアプリで作業しています。UITextfieldにプレースホルダープロパティがあることを知っています。ただし、UITextviewにはプレースホルダープロパティがありません。 UITextviewのプレースホルダーをカスタマイズする方法を知っています。ただし、違いを教えてください。

uITextfieldはUIControlを継承し、UIControlはUIView ... NSObjectを継承します。 UITextviewは、UIScrollView、UIView、UIresponder ... NSOBjectを継承しています。しかし、プレースホルダープロパティとの違いはどこにありますか。

Textfieldにプレースホルダープロパティが含まれる方法、textviewにプレースホルダーが含まれない理由

アイデア、提案、および/またはより良い説明を与えてください。

20
Mahesh Peri

UITextFieldにプレースホルダー値があり、UITextViewがその継承やプログラミングとは何の関係もないのはなぜですか。 Appleが彼らの使用を認識し、その使用を好む方法についてです。

UITextFieldは1行の項目です。ユーザー名、パスワード、アドレスビットなど、ほとんど何でも入力できます。多くの場合、それらのいくつかがひとまとめにされており、プレースホルダーテキストがないと、どのフィールドにどのデータが必要かを理解するのが難しい場合があります。プレースホルダーは、フィールドの目的を知らせます。

Text field example

UITextViewはテキストのブロックです。通常、複数の行があり、それらにはヘッダーが関連付けられていることがよくあります。その結果、プレースホルダーテキストは役に立たないことがよくあります。また、テキストビューには静的テキストが入力される可能性が高く、この場合もプレースホルダーテキストはあまり役に立たなくなります。

AppleとにかくUITextViewのプレースホルダープロパティを追加する必要があると思いますか?はい、必要なときに自分で作成しなければならないのは面倒です。Appleは、UITextViewを使用するいくつかの場所でプレースホルダテキストも使用します。次の例は、カレンダーエントリを追加したものです。

Text view example with placeholder

26
DBD

AppleがUITextViewにplaceHolder属性を含めなかった理由はわかりません。しかし、プレースホルダーテキストを含むUILabelサブビューを使用して属性を追加することができました。

次に、以下のようにデリゲートコールバックから表示または非表示にします

- (void)textViewDidBeginEditing:(UITextView *)textView
{
    self.defaultLabel.hidden = YES;
}

- (void)textViewDidChange:(UITextView *)txtView
{
    self.defaultLabel.hidden = ([txtView.text length] > 0);
}

- (void)textViewDidEndEditing:(UITextView *)txtView
{
    self.defaultLabel.hidden = ([txtView.text length] > 0);
}
52
sixthcent