在原型单元格中填充文本字段

时间:2015-12-23 18:29:29

标签: ios swift uitableview uitextfield

目前我在Storyboard中创建了一些自定义单元格原型,其中嵌入了文本字段。要访问这些文本字段,请在nameTextField = cell.viewWithTag:(1)中使用cellForRowAtIndexPath:。但在viewDidLoad:之前调用viewWillAppear:cellForRowAtIndexPath方法,因此当时nameTextFieldnil。要在屏幕上显示表格视图时填充文本字段,我使用viewDidAppear:,但会导致明显的延迟。此外,当我向上和向下滚动表格视图时,会一次又一次地调用cellForRowAtIndexPath:,重置已在文本字段中输入的数据。

是否有更有效的方法来填充自定义单元格中嵌入的文本字段'在视图显示之前显示数据的原型,并防止在每次cellForRowAtIndexPath:调用中重置输入的数据?

3 个答案:

答案 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)"。