无法通过cellForRowAtIndexPath获取单元格

时间:2015-01-23 09:44:15

标签: ios swift

我需要在启用UITableView的编辑模式时启用编辑文本字段。 它工作正常:

override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) ->
    Bool {
        if (self.tableView.editing)
        {
                let cell = tableView.cellForRowAtIndexPath(indexPath) as TestTableViewCell
                cell.testTextField.enabled=true
                cell.showsReorderControl = true
                return true
        }
        else{
            return false
        }
    }

关闭编辑模式时,textfield steel可编辑。我将代码添加到其他地方以修复它:

 else{
    let cell2 = self.tableView.cellForRowAtIndexPath(indexPath) as TestTableViewCell
                cell2.testTextField.enabled=false
            return false
        }

但是我收到了错误"致命错误:在打开一个Optional值时出乎意料地发现了nil"在这一行

let cell2 = self.tableView.cellForRowAtIndexPath(indexPath) as TestTableViewCell

2 个答案:

答案 0 :(得分:3)

cellForRowAtIndexPath只会在实际加载时返回一个单元格,即实际可见。任何不可见的行都没有加载单元格。

因此,您应检查可见性并检查单元格创建/外观/消失委托方法中的编辑状态,以便您可以在单元格上设置适当的状态。

答案 1 :(得分:1)

从Xcode给出的错误中,您需要检查数据类型。

else{
let cell2 = self.tableView.cellForRowAtIndexPath(indexPath) as? TestTableViewCell
            cell2?.testTextField.enabled=false
        return false
    }

添加'?'之后' as'会有条件检查,并添加另一个'?'仅在不为零时才设置属性。

使用Optional值编程时,这是一个非常常见的问题。希望这可以提供帮助。