2014-01-29 3 views
0

Я ищу альтернативный метод для cellForRowAtIndexPath. То, что я пытаюсь сделать, это в моем личном методе, я проверяю, присутствует ли текст в выходящей ячейке в массив, если он затем выбирает ячейку, оставаясь ею не выбранной. Я узнал, что cellForRowAtIndexPath работает только на видимых клетках и возвращает nil, если ячейка невидима. Ниже приведен мой настоящий код:Альтернатива cellForRowAtIndexPath

- (void)selectCells:(NSArray *)array 
{ 
    for (int row = 0; row < [self.tableView numberOfRowsInSection:1]; row ++) 
    { 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row 1]; 

     UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

     if ([array containsObject:cell.textLabel.text] && !cell.isSelected) 
     { 
      [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
     } 
    } 
} 

Что еще я могу использовать для достижения этого?

+0

быть ясно: вы хотите заменить cellForRowAtIndexPath в UITableView или cellForRowAtIndexPath в UITableViewDelegate ли? Это две совершенно разные вещи. (И вы не можете «заменить» один из них - они должны существовать и быть вызваны.) –

+0

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

+0

Ну, ты не ответил на мой вопрос. Но вы спрашиваете не того. Вы не пытаетесь поддерживать все ячейки, просто данные в ячейках. Я нахожу, что NSMutableArray, содержащий NSMutableDictionarys, хорошо работает для этого: каждый атрибут ячейки является парой имя/значение в соответствующем словаре. –

ответ

6

Я проверяю, если текст на выходящей ячейке присутствует в массиве

Это звучит как фундаментальная проблема. В парадигме Model View Controller, вид отвечает за отображение данных и взаимодействие с пользователем, а модель отвечает за хранение и работу с данными. Вы не должны смотреть на содержимое ячейки и принимать решения на основе этого; вам следует вместо этого взглянуть на данные в вашей модели.

UITableView работает так, как будто это происходит, потому что если вы следуете за MVC, совершенно не нужно держать ячейки, которые не видны. Всякий раз, когда таблица должна отображать новую ячейку, она запрашивает у вас эту ячейку, вызывая -tableView:cellForRowAtIndexPath:.

Я ищу альтернативу, чтобы получить все ячейки на моем столе.

Клетки не все существуют одновременно. Возможно, вы могли бы вызвать метод -tableView:cellForRowAtIndexPath: источника данных с разными путями индексов, как это делает таблица, и это будет возвращать каждую ячейку. Но это, вероятно, не правильное решение; вам нужно знать, где хранятся данные для таблицы, чтобы заполнить ячейки таблицы в первую очередь, поэтому вместо этого вы должны просто посмотреть данные напрямую.

0

Когда вы заполняете ячейки, они хранят в них все уникальные идентификаторы в массиве. Если у вас слишком много ячеек, это должно сработать. Затем вы можете просто использовать self.cellArray или как вы его называете, и получить объект по пути указателя. Я бы сохранил данные отдельно, как это было предложено, а затем, когда вы визуализируете ячейку в cellForIndexPath, убедитесь, что вы выбрали или отменили выбор ячейки в соответствии с вашими данными.

Setting static table cells

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