为啥 UITextview 没有 UITextField 之类的占位符属性 [重复]

Posted

技术标签:

【中文标题】为啥 UITextview 没有 UITextField 之类的占位符属性 [重复]【英文标题】:Why UITextview does not have placeholder property like UITextField [duplicate]为什么 UITextview 没有 UITextField 之类的占位符属性 [重复] 【发布时间】:2013-03-30 16:10:23 【问题描述】:

您好,我正在使用 iPhone 应用程序,我知道 UITextfield 具有占位符属性。但是 UITextview 没有占位符属性。我知道如何为 UITextview 自定义占位符的过程。但请告诉我其中的区别。

UITextfield 继承自 UIControl,而 UIControl 又继承自 UIView...NSObject。 而 UITextview 继承自 UIScrollView、UIView、UIresponder...NSOBject。但是与占位符属性的区别在哪里。

textfield如何包含占位符属性,为什么textview不包含占位符?

请提供任何想法、建议和/或提供更好的解释。

【问题讨论】:

试试这个post 【参考方案1】:

为什么UITextField 有一个占位符值,而UITextView 与它们的继承甚至编程无关。这是关于 Apple 如何看待他们的使用并更喜欢他们的使用。

UITextField 是一个单行项目。它可用于输入用户名、密码、地址位或几乎任何东西。通常您会将其中的几个聚集在一起,并且可能很难确定哪个字段应该包含哪些数据而没有占位符文本。占位符让我们知道该字段的用途。

UITextView 是一个文本块。通常是几行,通常有一个与之关联的标题。因此,占位符文本通常没有用处。文本视图也更有可能填充静态文本,这再次使占位符文本没有真正有用。

我认为 Apple 是否应该为 UITextView 添加一个占位符属性?是的。在我需要的时候必须自己做是很烦人的。 Apple 还在某些使用UITextView 的地方使用占位符文本。以下示例来自添加日历条目。

【讨论】:

非常感谢。很好的答案... 您可能是指最后一行中的 UITextView:Apple 在某些使用 UITextView 的地方也使用占位符文本。【参考方案2】:

我不知道为什么 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);

【讨论】:

很好的答案!注意:如果您的viewWillAppear 中有[txtView becomeFirstResponder],请删除textViewDidBeginEditing 或设置self.defaultLabel.hidden = NO;。谢谢! 像魅力一样工作。谢谢 完美!如果您在显示控制器时预加载 textview,并使用用户之前保存的一些值,请不要忘记在 viewWillAppear 中的预加载代码之后添加self.defaultLabel.hidden = ([txtView.text length] > 0);,否则占位符将在加载的文本顶部可见 太棒了!请注意,如果您希望它的行为类似于 UITextField 占位符,请删除 - (void)textViewDidBeginEditing:(UITextView *)textView。当用户实际开始输入时,占位符应该消失。 我喜欢这个答案,但想参考另一个线程:***.com/questions/1824463/… 见 Phil 的答案,2012 年 12 月 20 日。该答案显示了如何在 UITextView 下定位 UITextField。然后我通过查看是否输入了任何字符来控制占位符文本。我在 viewDidLoad 和 textViewDidChange 中做到了这一点。

以上是关于为啥 UITextview 没有 UITextField 之类的占位符属性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 UITextView 在我使用 frame 属性时出现,但在我使用约束时却没有?

为啥我的 UITextView 文本从开始时不显示并隐藏在导航栏下

为啥 UITextView 高度仅在滚动时变为动态?

为啥更改 UITextView 的框架原点会完全破坏我的整个框架大小?

为啥 UITextView 在调整大小后会在坏帧中绘制文本?

为啥 textView:shouldInteractWithTextAttachment:inRange: 永远不会在 UITextView 委托上被调用?