2015-09-22 4 views
2

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

Я уверен, что что-то должно быть сделано с делегатами heightForRowAtIndexPath и didSelectRowAtIndexPath, но я не знаю, как выбрать конкретную строку ячейки таблицы, используя didSelectRowAtIndexPath.

// Height of table cell rows 
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return 45 
} 

//On cell tap, expand 
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.tableView.rowHeight = 75; 
} 

Кроме того, возможно ли скрыть содержимое, переполненное из родительской ячейки? Вид вроде переполнения: скрытый; в CSS.

ответ

12

объявить глобальную переменную NSInteger типа и хранить строку на Tableview выбранного в didSelectRowAtIndexPath, а также перезагружать здесь. После проверки строки в heightForRowAtIndexPath и увеличьте высоту там. Попробуйте Как это

var selectedIndex : NSInteger! = -1 //Delecre this global 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if indexPath.row == selectedIndex{ 
     selectedIndex = -1 
    }else{ 
     selectedIndex = indexPath.row 
    } 
    tableView.reloadData() 
} 

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if indexPath.row == selectedIndex 
    { 
     return 75 
    }else{ 
     return 45 
    } 
} 
+0

Обратите внимание, что вы не получаете анимации с этим решением, в отличие от ответа Fayza – Joey

4

То, что вы должны сделать, это сохранить индекс выбранной ячейки в методе didSelectRow. а также должны начинать/заканчивать обновления в виде таблицы. Это перезагрузит часть таблицы. и вызовет метод heightForRow. В этом методе вы можете проверить, что если будет выбран ряд один, то вернуть expandedHeight, в противном случае возврата в нормальный высота

В высоту строки:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

    if self.selectedSortingRow == indexPath.row { 
     return ExpandedRowHeight 
    } 
    else{ 
     return normalHeight 
    } 
} 

В didSelect Row:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    self.tableView.beginUpdates() 
    selectedSortingRow = (int) indexPath.row   
    self.tableView.endUpdates() 
} 
+0

сообщите мне, если вы этого не получили –

+0

Получил это, этот и другой ответ поможет тонну, спасибо! – 10000RubyPools

+0

Обратите внимание, что вам не нужно сохранять свою собственную переменную для отслеживания этого, поскольку представление таблицы отслеживает свой выбранный путь индекса через 'tableView.indexPathForSelectedRow' – Joey

Смежные вопросы