我正在开发一个应用程序,用户需要写一些信息。为此,我需要一个多行的 UITextField
(通常情况下,UITextField
只有单行)。
通过谷歌搜索,我发现可以使用 UITextView
代替 UITextfield
实现这个目的。
我正在开发一个应用程序,用户需要写一些信息。为此,我需要一个多行的 UITextField
(通常情况下,UITextField
只有单行)。
通过谷歌搜索,我发现可以使用 UITextView
代替 UITextfield
实现这个目的。
UITextField
是仅限单行的。
你的 Google 搜索是正确的,你需要使用 UITextView
来显示和编辑多行文本。
在 Interface Builder 中,将 UITextView
添加到需要的位置并选择 "editable" 复选框。它将默认为多行。
你可以使用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
如下:
Ok,我使用了一些技巧;) 首先构建一个UITextField
并将其size
增加如下:
CGRect frameRect = textField.frame;
frameRect.size.height = 53;
textField.frame = frameRect;
接下来在与你创建的UITextField
相同的区域内创建一个UITextView
,并删除它的background color
。现在看起来就像你拥有了一个多行的TextField
!
UITextView
。使用UITextField
的原因在于它的行为与UITextView
不同。 - Nate SymerUITextView
和UITextfield
之间有很多区别:它们继承自UIScrollView
与UIControl
,默认情况下不可编辑与可编辑,多行与单行,不同的委托协议,没有占位符与有占位符。 - Sam BallantyneUITextView
用于文本段落。如果您需要一个文本段落,就使用它,否则不要使用。 - Sam Ballantyne如果您需要一个有两行文本的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 是您要寻找的内容。您需要以不同的方式处理一些事情(例如换行键),但您可以向其添加文本,并且如果文本过多,则允许您向上和向下滚动。
此链接提供有关创建输入数据屏幕的信息:
'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中或通过storyboard设置代理:
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"
}
}
}
textView
,然后符合其代理,调用textViewDidChange
方法,将其放在方法调用内tableView.beginUpdates()
和tableView.endUpdates()
,并不要忘记将rowHeight
和estimatedRowHeight
设置为UITableView.automaticDimension
。