У меня есть ячейка UITableview, которая получает данные из основной базы данных. TallyTable находится в контроллере представления внутри представления UITab. У меня есть заявление NSLog, которое выводит значение подсчета всякий раз, когда оно обновляется. Другая вкладка имеет список для изменения источника (другой день) для подсчета голосов. Я использую iOS5 с ARC для iOS 4.2.
Вот проблема. Когда я загружаю приложение, на вкладке таблицы отображаются правильные подсчеты за последний выбранный день. Если я затем перейду на вкладку «День», изменим день и вернусь к вкладке «Подсчет», на дисплее не будет никаких изменений. Однако viewWillAppear на вкладке подсчета запускается, и, когда таблица циклически перебирает cellForIndexPath, мой оператор NSLog выводит все правильные новые значения. Если я затем прокручиваю верхнюю метку за пределы экрана и возвращаю метку, она обновляется до нового значения.
Я пробовал setNeedsLayout и setNeedsDisplay на UILabel, UITableViewCell, UITableView и контроллере представления, загружающем таблицу. Я попытался изменить идентификатор CellReuse, чтобы он никогда не использовал ячейку повторно.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
CollectionItemTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[CollectionItemTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSUInteger row = [indexPath row];
cell.textLabel.text = [[self.collectionKeys objectAtIndex:row] valueForKey:@"collectionTitle"];
NSInteger test1 = indexPath.row + 150;
NSLog(@"tag = %i", test1);
cell.tallyButton.tag = test1;
NSNumber * questionID = [[self.collectionKeys objectAtIndex:row] valueForKey:@"answerID"];
cell.tallyLabel.text = [NSString stringWithFormat:@"%i",[self updatePointTotal:questionID]];
NSLog(@"Collection text should be = %@", [NSString stringWithFormat:@"%i",[self updatePointTotal:questionID]]);
[cell setNeedsLayout];
return cell;
}
Я прочитал более полудюжины подобных вопросов. У меня ушло около трех часов, чтобы решить эту проблему.
РЕДАКТИРОВАТЬ: Я думал, что я исправил это с помощью контроллера навигации, чтобы снова установить контроллер представления верхнего уровня на представление. Я признаю, что теперь это похоже на классически клёвый хак во всех отношениях. Когда вид нажимается, все обновляется, и это без шва. Однако, чтобы иметь фиксированный нижний колонтитул для настройки параметров выбора кнопок таблицы, я использовал UIView с двумя подпредставлениями, UITableView сверху и простой UIView с четырьмя кнопками внизу.
Надписи на кнопках необходимо менять в зависимости от источника данных. Теперь, когда контроллер представления помещен в представление, он скрывает мой фиксированный вид нижнего колонтитула. Итак, я вставил фиксированный нижний колонтитул в UITableview, и все выглядело нормально, пока я не прокрутил UITableView и не прокрутил его вместе с ним. Таблица в основном представляет собой подсчетный лист с кнопками рядом с каждым элементом, а в нижнем колонтитуле - четыре кнопки, чтобы отметить цвет подсчитанного элемента. Скажем, следующий элемент был зеленым lego, вы должны нажать «зеленый» в нижнем колонтитуле и кнопку рядом с «lego» в таблице. Когда я нажимаю контроллер представления с двумя подпредставлениями, метки UITableview не обновляются. Таким образом табличное представление должно быть выдвинуто само (насколько я могу сказать).
ОТВЕТ: см. Комментарий ниже, но в конечном итоге мне нужно было перезагрузить как видимые данные UITableView, так и данные контроллера UITableView делегата за ним.