Загрузка ячейки выборочно в TableView - PullRequest
0 голосов
/ 05 октября 2011

Мне нужно вернуть ячейку в tableView: cellForRowAtIndexPath: только когда выполняется какое-то условие, например:

if (condition == true)
return nil;
else
return cell;

Возвращая ноль, я получаю ошибку.

Ответы [ 4 ]

1 голос
/ 05 октября 2011

Вам нужно сделать немного больше, чтобы условно иметь ячейку в UITableView.

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if(condition) {
        return 3;
    } else {
        return 2;
    }
}

Далее вы можете вернуть фактическую ячейку.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(condition) {
        if(indexPath.row == 0) {
            //create and return conditional cell
        } else {
            //create and return normal cell
        }
    } else {
        //create and return normal cell
    }
}

И вуаля!

PS: (Это при условии, что все сделано в одном разделе. Если вам нужно разбить это на несколько разделов, мы также можем разобраться в этом).

0 голосов
/ 22 июля 2014

Вы должны проверить условие, когда источник данных Cell установлен:)

и отфильтровать ваши данные с условием.

0 голосов
/ 05 октября 2011

В зависимости от того, что именно вы намереваетесь сделать, не могли бы вы выполнить условный тест перед вызовом таблицы: cellForRowAtIndexPath:

EG

if( someCondition )
{
    [self.tableview cellForRowAtIndexPath:indexPath]
}

Или если ваш выходПриходится только отображать ячейки таблицы, которые удовлетворяют определенному условию. Я предлагаю вам создать функцию, которая будет копировать эти элементы из ваших данных табличного просмотра в NSArray, который вы будете использовать для отображения желаемых / условных данных таблицы.

IE

-(void)composeVisibleTableData
{
    [m_visibleTableData removeAllObjects];
    for( NSObject* dataObject in m_tableDataArray )
    {
       if( someCondition )//dataObject meetsCondition
       {
           m_visibleTableData addObject:dataObject];
       }
    }

}

Тогда в ваших UITableDelegate функции для numberOfRowsInSection: и tableview: cellForRowAtIndexPath: ссылаются на m_visibleTableData в качестве источника данных UITableView.

0 голосов
/ 05 октября 2011

Это потому, что в вашем UITableView не может быть пустых мест, что недопустимо, вы должны как минимум вернуть пустую ячейку. Что ты пытаешься сделать?

Ошибка возникает, когда TableView пытается получить следующую ячейку и получает ноль, она должна получить следующую ячейку, несмотря ни на что.

...