UITableView和reuseablecells的问题

时间:2016-03-16 03:30:19

标签: swift didselectrowatindexpath uitableview

所以我现在遇到了两个问题,我的(非常基本的)tableview。我将粘贴我的代码,但这里是一般要点:我正在制作一个字典应用程序,因此每个单元格包含两种语言的两个标签。如果一个细胞被轻拍,我想:1。细胞高度增加,2。字体大小增加,3。文本对齐中心,4。细胞背景改变颜色。

如果第二次选择它,我还包括“重置”所选单元格的代码 - 这似乎是导致我的第二个问题

问题是选择了一个单元格:

  1. 这四件事发生在目前屏幕外的细胞上。

  2. 程序在以下情况下崩溃:我选择单元格0,单元格更改很好,但是当我点击当时屏幕外的任何单元格(比如单元格10)时,程序将崩溃,从而导致出现此错误:

    致命错误:在解开可选值时意外发现nil

  3. 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
        }
    
    非常感谢你们,非常感谢你们的帮助。

1 个答案:

答案 0 :(得分:0)

所以我提出的问题没有真正的答案,最好的解决方法就是让另一个数组维持单元格中的状态。糟透了我知道,但真的是最好的"解决方案"