我有一个带有一个原型单元的动态UITableViewController。在这个单元格中有2个UITextViews。每个都应该是可编辑的。如果这很重要:数据来自json文件并以NSArray的形式存在。 (我在Swift中编程,所以正确的类型是[[[String:String]]])。 我的问题是,当我点击其中一个TextView时,iPad似乎加载了几秒钟,在此期间主线程被阻止,没有任何反应。然后键盘弹出,我可以编辑文本。选择第一个TextView后,我可以在它们之间快速切换。即使TextView重新启动了他的第一个响应者,我也可以点击其中一个,键盘打开得非常快。 我怎样才能在开始时加紧装载? 我试着打电话给
myTextView.becomeFirstResponder()
在cellForRowAtIndexPah中(仅适用于第一个TextView),然后整个视图在显示之前加载4秒钟。 我希望你明白我的意思。如果您需要任何代码来更好地理解它,请告诉我:)
提前致谢!
编辑#1:
自定义类
class BeschreibungZusatzCell: UITableViewCell, UITextViewDelegate {
var delegate: CellDelegate?
@IBOutlet weak var titelTextView: CellTextView!
@IBOutlet weak var beschreibungTextView: CellTextView!
override func layoutSubviews() {
super.layoutSubviews()
if titelTextView != nil {
titelTextView.delegate = self
}
if beschreibungTextView != nil {
beschreibungTextView.delegate = self
}
}
var titel: String! {
didSet{
titelTextView.text = titel
}
}
var beschreibung: String! {
didSet{
beschreibungTextView.text = beschreibung
}
}
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
textView.resignFirstResponder()
delegate?.cell(self, didChangeContentAtIndexPath: (textView as CellTextView).indexPath!, andSpalte: (textView as CellTextView).spalte!, toString: textView.text)
return false
}
delegate?.cell(self, didChangeContentAtIndexPath: (textView as CellTextView).indexPath!, andSpalte: (textView as CellTextView).spalte!, toString: textView.text)
return true
}
}
(对不起一些德语名称,他们理解我认为的代码并不重要:))所以单元格有一个委托,这是我的TableViewController。并且两个TextView中的每一个都有一个委托,也就是单元格。因此,如果TextViews更改了它们的字符串,我可以在TableViewController中获取一条消息。我需要它来保存更改。
答案 0 :(得分:0)
将becomeFirstResponder
来电转移到didEndDisplayingCell
或其他方法。 cellForRowAtIndexPath用于配置您的单元格,而不是用于执行与UI相关的任务。