我正在开发一个应用程序,用户必须写一些信息。为此,我需要一个UITextField是多行(在一般情况下UITextField是单行)。
当我在谷歌搜索时,我找到了一个使用UITextView而不是UITextfield的答案。
我正在开发一个应用程序,用户必须写一些信息。为此,我需要一个UITextField是多行(在一般情况下UITextField是单行)。
当我在谷歌搜索时,我找到了一个使用UITextView而不是UITextfield的答案。
当前回答
使用textView代替,然后遵循它的委托,调用textViewDidChange方法在该方法调用tableView.beginUpdates()和tableview . endpdates(),不要忘记设置rowHeight和estimatedRowHeight为UITableView.automaticDimension。
其他回答
UITextField是单行的。
你的谷歌搜索是正确的,你需要使用UITextView而不是UITextField来显示和编辑多行文本。
在Interface Builder中,在你想要的地方添加一个UITextView,并选择“可编辑”框。默认情况下是多行。
作为上面h4xxr回答的补充,调整UITextField高度的一个更简单的方法是在属性检查器->文本字段中选择方形边框样式。(默认情况下,UITextfield的边框样式是椭圆。)
参考:回答Brian在这里:如何设置UITextField高度?
还有另一个选择对我很有效:
子类UITextField并覆盖:
- (void)drawTextInRect:(CGRect)rect
在这个方法中,你可以例如:
NSDictionary *attributes = @{ NSFontAttributeName : self.font,
NSForegroundColorAttributeName : self.textColor };
[self.text drawInRect:verticalAlignedRect withAttributes:attributes];
如果rect有足够的空间,这段代码将使用所需的行数来呈现文本。您可以根据需要指定任何其他属性。
请勿使用:
self.defaultTextAttributes
这将强制一行文本渲染
使用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或通过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"
}
}
}