我正在开发一个用户必须写一些信息的应用程序。为此,我需要一个UITextField
多行的(通常UITextField
是单行)。
当我在谷歌搜索时,我找到了一个使用UITextView
而不是UITextfield
为此目的的答案。
我正在开发一个用户必须写一些信息的应用程序。为此,我需要一个UITextField
多行的(通常UITextField
是单行)。
当我在谷歌搜索时,我找到了一个使用UITextView
而不是UITextfield
为此目的的答案。
UITextField
特别是只有一行。
您的 Google 搜索是正确的,您需要使用UITextView
而不是UITextField
用于显示和编辑多行文本。
在 Interface Builder 中,添加一个UITextView
您想要的位置并选择“可编辑”框。默认情况下它将是多行的。
您可以使用 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
好的,我用一些技巧做到了;)首先构建一个UITextField
并增加它是size
这样的:
CGRect frameRect = textField.frame;
frameRect.size.height = 53;
textField.frame = frameRect;
然后UITextView
在你制作我的相同区域建立一个UITextField
,并删除它background color
。现在看起来你有多行TextField
!
除了多行行为之外,UITextView 和 UITextField 之间的主要区别在于 UITextView 不提出占位符。要绕过此限制,您可以使用带有“假占位符”的 UITextView。
有关详细信息,请参阅此 SO 问题:Placeholder in UITextView。
是的,你正在寻找一个 UITextView 。您必须以不同的方式处理一些事情(例如返回键),但您可以向其中添加文本,并且如果里面有太多文本,它可以让您上下滚动。
此链接包含有关制作屏幕以输入数据的信息:
如果您必须有一个包含 2 行文本的 UITextField,则一种选择是添加一个 UILabel 作为第二行文本的 UITextField 的子视图。我的应用程序中有一个 UITextField,用户通常没有意识到它可以通过点击进行编辑,我想在 UITextField 中添加一些“点击编辑”的小字幕文本。
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];
使用 UITextView 而不是 UITextField
'override func viewDidLoad(){
super.viwDidLoad()
YOUR_TEXT_VIEW.textColor = UIColor.gray // YOUR PREFERRED PLACEHOLDER COLOR HERE
YOUR_TEXT_VIEW.text = "YOUR DEFAULT PLACEHOLDER TEXT HERE"
YOUR_TEXT_VIEW.delegate = self
}'
这个代码块就足够了。请不要忘记在 viewDidLoad 或故事板中设置委托,以使用以下扩展:
extension YOUR_VIEW_CONTROLLER: UITextViewDelegate {
func textViewDidBeginEditing (_ textView: UITextView) {
if YOUR_TEXT_VIEW.text.isEmpty || YOUR_TEXT_VIEW.text == "YOUR DEFAULT PLACEHOLDER TEXT HERE" {
YOUR_TEXT_VIEW.text = nil
YOUR_TEXT_VIEW.textColor = .red // YOUR PREFERED COLOR HERE
}
}
func textViewDidEndEditing (_ textView: UITextView) {
if YOUR_TEXT_VIEW.text.isEmpty {
YOUR_TEXT_VIEW.textColor = UIColor.gray // YOUR PREFERED PLACEHOLDER COLOR HERE
YOUR_TEXT_VIEW.text = "YOUR DEFAULT PLACEHOLDER TEXT HERE"
}
}
}
对上面h4xxr的回答的补充,调整UITextField高度的更简单的方法是在属性inspectors->Text Field中选择方形边框样式。(默认情况下,UITextfield 的边框样式是椭圆。)
参考:在这里回答 Brian:如何设置 UITextField 高度?
改为使用textView
然后符合其委托,textViewDidChange
在该方法调用中调用该方法tableView.beginUpdates()
,tableView.endUpdates()
并且不要忘记设置rowHeight
和estimatedRowHeight
to UITableView.automaticDimension
。
还有另一个对我有用的选择:
子类 UITextField 并覆盖:
- (void)drawTextInRect:(CGRect)rect
在这种方法中,您可以例如:
NSDictionary *attributes = @{ NSFontAttributeName : self.font,
NSForegroundColorAttributeName : self.textColor };
[self.text drawInRect:verticalAlignedRect withAttributes:attributes];
如果矩形有足够的空间,此代码将根据需要使用尽可能多的行来呈现文本。您可以根据需要指定任何其他属性。
不使用:
self.defaultTextAttributes
这将强制一行文本呈现