Тип аксессуара ячейки не перезагружается на [tableview reloadData]
Я очень плохо знаком с программированием на iPhone, поэтому моя проблема может быть вызвана полным отсутствием знаний об основных принципах.
Я разрабатываю приложение для iPhone, которое имеет два вида. Первый вид имеет две кнопки, при нажатии одной из которых появляется всплывающее окно модального вида с табличным видом. Это табличное представление заполняется по-разному в зависимости от того, какая кнопка нажата. Если кнопка button1 нажата, представление таблицы заполняется кнопкой buttonData. Пользователь может выбрать ячейки, и если это сделано, тип доступа к ячейкам устанавливается в UITableViewCellAccessoryCheckmark. Затем я сохраняю имя проверенных ячеек в tableViewListChecked, чтобы впоследствии можно было решить, какую ячейку следует проверять при изменении данных.
Проблема заключается в следующем: после того, как модальное представление закрыто, и я выбираю button2, ячейки, которые были выбраны в button1Data, все еще выбраны в button2Data. Для меня ясно, что функция [theTableView reloadData] работает, так как данные действительно меняются, однако accesorytupes остается прежним, пока я не прокручиваю ячейки с экранов.
PS Если я на самом деле прокручиваю ячейки экрана, то там аксессуар установлен правильно.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryNone;
}
else if ([tableViewListChecked containsObject:[NSString stringWithString:cell.textLabel.text]]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
cell.textLabel.text = [tableViewList objectAtIndex:indexPath.row];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (![tableViewListChecked containsObject:[NSString stringWithString:cell.textLabel.text]]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[tableViewListChecked addObject:[NSString stringWithString:cell.textLabel.text]];
}
else if ([tableViewListChecked containsObject:[NSString stringWithString:cell.textLabel.text]]) {
cell.accessoryType = UITableViewCellAccessoryNone;
[tableViewListChecked removeObject:[NSString stringWithString:cell.textLabel.text]];
}
}
Спасибо за помощь!
3 ответа
Если ячейка не равна нулю (если она была исключена из табличного представления), то вы фактически не меняете тип аксессуара. Отбрось остальное, т.е. поменяй
else if ([tableViewListChecked containsObject:[NSString stringWithString:cell.textLabel.text]]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
в
if ([tableViewListChecked containsObject:[NSString stringWithString:cell.textLabel.text]]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
Если ребята здесь не помогли вам, вы можете просто установить: cell.accessoryType = UITableViewCellAccessoryNone каждый раз, когда пользователь нажимает на button2
Похоже, вы используете один и тот же экземпляр UITableView
каждый раз, когда вы представляете модальное представление, в этом случае, что происходит с tableViewListChecked
массив? Вы меняете данные в tableViewList
; но вы используете какую-то стратегию, чтобы сохранить список отмеченных пунктов между нажатиями на button1 и button2?