引用 TableView 单元格时出错
Error Refencing To a TableView Cell
我在设备上测试我的代码时遇到错误:fatal error: unexpectedly found nil while unwrapping an Optional value
。
我正在为 TableViewController 实现一些代码,从而在 touch/press 上突出显示某些 TableView 单元格。
我已将问题隔离到 'row 6',这是我的 TableView 的最后一行。当我注释掉这一行的代码时,代码运行完美。
我已经以编程方式(在 StoryBoard 中)将行数设置为 7。
我就是不明白为什么会出现这个错误。显然它无法打开最后一个单元格,但我不明白为什么。
这是我的代码:
注意:第 0 行和第 1 行(前两行)不是 'clickable',因此我的代码中未引用它们。
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 7
}
//Make TableView Cells Highlight On Touch Respectively.
override func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))
cell!.contentView.backgroundColor = UIColor(red: 170/255, green: 139/255, blue: 255/255, alpha: 1.0)
let cell1 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))
cell1!.contentView.backgroundColor = UIColor(red: 138/255, green: 231/255, blue: 36/255, alpha: 1.0)
let cell3 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 4, inSection: 0))
cell3!.contentView.backgroundColor = UIColor(red: 135/255, green: 190/255, blue: 255/255, alpha: 1.0)
let cell4 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 5, inSection: 0))
cell4!.contentView.backgroundColor = UIColor(red: 250/255, green: 236/255, blue: 67/255, alpha: 1.0)
let cell5 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 6, inSection: 0))
cell5!.contentView.backgroundColor = UIColor(red: 182/255, green: 181/255, blue: 182/255, alpha: 1.0)
}
override func tableView(tableView: UITableView, didUnhighlightRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))
cell!.contentView.backgroundColor = .clearColor()
let cell1 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))
cell1!.contentView.backgroundColor = .clearColor()
let cell3 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 4, inSection: 0))
cell3!.contentView.backgroundColor = .clearColor()
let cell4 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 5, inSection: 0))
cell4!.contentView.backgroundColor = .clearColor()
let cell5 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 6, inSection: 0))
cell5!.contentView.backgroundColor = .clearColor()
}
提前感谢您抽出时间:-)
根据 cellForRowAtIndexPath 的 Apple 文档
Return 值
表示 table 的单元格的对象,如果单元格不可见或 indexPath 超出范围,则为 nil。
您在方法中创建实例变量以引用单元格并在下一行中强制展开它们。您尝试强制展开的最后一个单元格可能不可见,并且该方法返回 nil,因为该单元格不存在/该行的单元格尚未出队。
如果您确实希望所有单元格都改变颜色,您可能想要使用 if let 语句来防止出现空单元格,或者如果您只想更改一个单元格的颜色,则需要使用 switch 语句。
几乎不惜一切代价避免强制解包!
if let cell5 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 6, inSection: 0)){
cell5.contentView.backgroundColor = UIColor(red: 182/255, green: 181/255, blue: 182/255, alpha: 1.0)
}
我在设备上测试我的代码时遇到错误:fatal error: unexpectedly found nil while unwrapping an Optional value
。
我正在为 TableViewController 实现一些代码,从而在 touch/press 上突出显示某些 TableView 单元格。
我已将问题隔离到 'row 6',这是我的 TableView 的最后一行。当我注释掉这一行的代码时,代码运行完美。
我已经以编程方式(在 StoryBoard 中)将行数设置为 7。
我就是不明白为什么会出现这个错误。显然它无法打开最后一个单元格,但我不明白为什么。
这是我的代码:
注意:第 0 行和第 1 行(前两行)不是 'clickable',因此我的代码中未引用它们。
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 7
}
//Make TableView Cells Highlight On Touch Respectively.
override func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))
cell!.contentView.backgroundColor = UIColor(red: 170/255, green: 139/255, blue: 255/255, alpha: 1.0)
let cell1 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))
cell1!.contentView.backgroundColor = UIColor(red: 138/255, green: 231/255, blue: 36/255, alpha: 1.0)
let cell3 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 4, inSection: 0))
cell3!.contentView.backgroundColor = UIColor(red: 135/255, green: 190/255, blue: 255/255, alpha: 1.0)
let cell4 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 5, inSection: 0))
cell4!.contentView.backgroundColor = UIColor(red: 250/255, green: 236/255, blue: 67/255, alpha: 1.0)
let cell5 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 6, inSection: 0))
cell5!.contentView.backgroundColor = UIColor(red: 182/255, green: 181/255, blue: 182/255, alpha: 1.0)
}
override func tableView(tableView: UITableView, didUnhighlightRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))
cell!.contentView.backgroundColor = .clearColor()
let cell1 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))
cell1!.contentView.backgroundColor = .clearColor()
let cell3 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 4, inSection: 0))
cell3!.contentView.backgroundColor = .clearColor()
let cell4 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 5, inSection: 0))
cell4!.contentView.backgroundColor = .clearColor()
let cell5 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 6, inSection: 0))
cell5!.contentView.backgroundColor = .clearColor()
}
提前感谢您抽出时间:-)
根据 cellForRowAtIndexPath 的 Apple 文档
Return 值 表示 table 的单元格的对象,如果单元格不可见或 indexPath 超出范围,则为 nil。
您在方法中创建实例变量以引用单元格并在下一行中强制展开它们。您尝试强制展开的最后一个单元格可能不可见,并且该方法返回 nil,因为该单元格不存在/该行的单元格尚未出队。
如果您确实希望所有单元格都改变颜色,您可能想要使用 if let 语句来防止出现空单元格,或者如果您只想更改一个单元格的颜色,则需要使用 switch 语句。
几乎不惜一切代价避免强制解包!
if let cell5 = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 6, inSection: 0)){
cell5.contentView.backgroundColor = UIColor(red: 182/255, green: 181/255, blue: 182/255, alpha: 1.0)
}