2016-12-08 5 views
0

Я пытаюсь скрыть конкретную ячейку в моем представлении таблицы?Скрыть конкретную ячейку в моей таблице

private var yourDataSource = [AccountData.AllTasksDB] //A Json Array originally 

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{ 
    var rowHeight:CGFloat = 72 

    //AccountData.AllTasksDB[indexPath.row]["importantvariable"] 
    if (self.yourDataSource[indexPath.row]["importantvarible"] == "0") 
    { 
     print("Cell is mine") 
     rowHeight = 0 
    } 
    else 
    { 
     print("Cell is not mine") 
     rowHeight = 72.0 
    } 

    return rowHeight 
} 

Может ли кто-нибудь сказать мне, что я делаю неправильно? Я думал, что он перебирает каждую ячейку и проверяет значение, которое я установил раньше. Но, похоже, он не хочет получать к нему доступ.

+0

Я хотел бы предложить спасение indexPath клетки (ов) вы хотите скрыть, а затем перезагрузить таблицу для определения RowHeight – Nathaniel

+0

'Tableview .cellForRowAtIndexPath (indexPath) 'может возвращать nil, потому что ячейка была удалена ... – Nathaniel

+0

Пример:' fileprivate var self.hiddenCellIndexes.contains: [IndexPath] ', а затем в вашем делегате tableView heightForRow:' if self.hiddenCellIndexes.contains (indexPath) ' – Nathaniel

ответ

0

Я полагал, что это будет более разборчивым в ответ

fileprivate var yourDataSource = [YourObject]() 

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

    if self.yourDataSource[indexPath].isMine == true { 

    return 0 
    } 
    else 
    { 
    return 72.0 //or whatever you like 
    } 
} 
+0

Просто обязательно добавьте/удалите индексы по мере необходимости, затем вызовите' self.tableView.reloadData() ' – Nathaniel

+0

Я обновил свой код. Но он все еще не видит переменные ячейки (cell.isMine из класса TableViewCellMyTasks). Я пытаюсь проверить, есть ли переменная в true, и если да, установите высоту ячейки в 0 (в основном ее скрыть) – Taurian

+0

Я не предлагаю, чтобы вы обращались к свойствам самих ячеек. Вы должны использовать свой источник данных (который используется для заполнения ячеек, правда?), Чтобы определить высоту. Это имеет смысл? – Nathaniel

0

Вы получаете доступ к соте в методе tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath). В этот момент ячейка еще не виден (или перечеркнута). Если ячейка не видна, она будет равна нулю, следовательно, ваша ошибка.

Попробуйте поставить точку останова на let cell = tableView.cellForRowAtIndexPath(indexPath) as! TableViewCellMyTasks, и вы увидите, что она равна нулю.

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