目前我在Storyboard中创建了一些自定义单元格原型,其中嵌入了文本字段。要访问这些文本字段,请在nameTextField = cell.viewWithTag:(1)
中使用cellForRowAtIndexPath:
。但在viewDidLoad:
之前调用viewWillAppear:
和cellForRowAtIndexPath
方法,因此当时nameTextField
为nil
。要在屏幕上显示表格视图时填充文本字段,我使用viewDidAppear:
,但会导致明显的延迟。此外,当我向上和向下滚动表格视图时,会一次又一次地调用cellForRowAtIndexPath:
,重置已在文本字段中输入的数据。
是否有更有效的方法来填充自定义单元格中嵌入的文本字段'在视图显示之前显示数据的原型,并防止在每次cellForRowAtIndexPath:
调用中重置输入的数据?
答案 0 :(得分:1)
我不确定我完全理解你要做的是什么,但是通常使用cellForRowAtIndexPath:
方法配置单元格,而不是viewDidLoad
。您还可以尝试将文本字段连接到自定义单元类的插座。然后你可以这样做:
// in view controller
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
as! CustomCell
let object = myDataSource[indexPath.row]
cell.textField.text = object.description
cell.shouldBecomeFirstResponder = indexPath.row == 0
return cell
}
// then in the cell
class CustomCell: UITableViewCell {
@IBOutlet weak var textField: UITextField!
var shouldBecomeFirstResponder: Bool = false
override func awakeFromNib() {
if shouldBecomeFirstResponder {
textField.becomeFirstResponder()
}
}
}
然后,当用户在文本字段中输入文本时,更新数据源是有意义的。
答案 1 :(得分:1)
我猜您正在创建配置文件屏幕(或者有很多textField来获取用户的输入数据)。我对吗?
如果我是对的,你可以使用静态tableView(当你有几个textFields时)
希望这可以提供帮助。
答案 2 :(得分:0)
在viewDidLoad尝试运行self.tableView.reloadData之前,先执行此行" nameTextField = cell.viewWithTag:(1)"。