Проблемы с UITableView и повторным использованием ячеек

Так что сейчас я испытываю две проблемы с моим (довольно базовым) видом таблицы. Я вставлю свой код ниже, но вот общая суть: я делаю приложение для словаря, поэтому каждая ячейка содержит две метки для двух языков. если коснуться ячейки, мне бы хотелось: 1. увеличения высоты ячейки, 2. увеличения размера шрифта, 3. центра выравнивания текста, 4. изменения цвета фона ячейки.

я также включил код для "сброса" выбранной ячейки, если она выбрана во второй раз - это, кажется, вызывает мою вторую проблему

проблема в том, когда ячейка выбрана:

  1. эти четыре вещи происходят с клетками, которые в настоящее время находятся за кадром.

  2. программа аварийно завершает работу, когда: я выбираю ячейку 0, ячейка меняется, что хорошо, но когда я щелкаю по любой ячейке, находящейся вне экрана (скажем, ячейка 10), программа завершается сбоем, давая мне эту ошибку:

    фатальная ошибка: неожиданно найден ноль при развертывании необязательного значения

код:

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 ответ

Поэтому нет реального ответа на поставленные мною вопросы. Лучшим обходным путем является просто наличие другого массива, который поддерживает состояния в ячейках. отстой, я знаю, но действительно лучшее "решение"

Другие вопросы по тегам