所以我现在遇到了两个问题,我的(非常基本的)tableview。我将粘贴我的代码,但这里是一般要点:我正在制作一个字典应用程序,因此每个单元格包含两种语言的两个标签。如果一个细胞被轻拍,我想:1。细胞高度增加,2。字体大小增加,3。文本对齐中心,4。细胞背景改变颜色。
如果第二次选择它,我还包括“重置”所选单元格的代码 - 这似乎是导致我的第二个问题
问题是选择了一个单元格:
这四件事发生在目前屏幕外的细胞上。
程序在以下情况下崩溃:我选择单元格0,单元格更改很好,但是当我点击当时屏幕外的任何单元格(比如单元格10)时,程序将崩溃,从而导致出现此错误:
致命错误:在解开可选值时意外发现nil
码
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// reset previous cell but only if selectedRow isn't -1 which is initial value
if selectedRowIndex != -1{
let previousCell = convoTable.cellForRowAtIndexPath(NSIndexPath(forRow: selectedRowIndex, inSection: 0)) as! PhraseTableViewCell
previousCell.backgroundColor = UIColor.whiteColor()
previousCell.lang2Label.font = UIFont(name: (previousCell.lang2Label?.font?.fontName)!, size: (previousCell.lang2Label?.font?.pointSize)! - 5)
previousCell.lang2Label.textAlignment = .Right
}
//make changes to new cell that was pressed upon
if selectedRowIndex != indexPath.row{
print("new cell got selected")
cellSelected = true
// save the selected index
self.selectedRowIndex = indexPath.row
let cell = self.convoTable.cellForRowAtIndexPath(indexPath) as! PhraseTableViewCell
cell.lang2Label.font = UIFont(name: (cell.lang2Label?.font?.fontName)!, size: (cell.lang2Label?.font?.pointSize)! + 5)
cell.backgroundColor = UIColor.cyanColor()
cell.lang2Label.textAlignment = .Center
// update the height for all the cells
self.convoTable.beginUpdates()
self.convoTable.endUpdates()
cell.lang1Label.frame = CGRectMake(3,0, cell.bounds.width, cell.bounds.height/3)
cell.lang2Label.frame = CGRectMake(-3,cell.bounds.height/3, cell.bounds.width, cell.bounds.height/3 * 2)
}
else {
print("same cell pressed")
cellSelected = false
selectedRowIndex = -1
}
self.convoTable.beginUpdates()
self.convoTable.endUpdates()
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! PhraseTableViewCell
cell.lang1Label.text = items![indexPath.row].eng
cell.lang2Label.text = items![indexPath.row].prs
return cell
}
非常感谢你们,非常感谢你们的帮助。
答案 0 :(得分:0)
所以我提出的问题没有真正的答案,最好的解决方法就是让另一个数组维持单元格中的状态。糟透了我知道,但真的是最好的"解决方案"