Я создаю пользовательский элемент селектора меню UITableView. Каждый раз, когда я выбирал определенную строку, я сохраняю индексный путь этой строки, поэтому в следующий раз, когда пользователь будет выбирать другую строку, люди могут узнать свою предыдущую выбранную строку. Поэтому я добавил это в cellForRowAtIndexpathЯ добавил selectRowAtIndexPath в cellForRowAtIndexpath, чтобы отметить предыдущую выбранную строку, но если прокрутить tablview, она разбивается
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
cell.textLabel.text = self.left[indexPath.row][@"name"];
[tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:[[[NSUserDefaults standardUserDefaults] objectForKey:kPreviousSelectedRow] integerValue] inSection:0] animated:YES scrollPosition:UITableViewScrollPositionNone];
cell.selectionStyle = UITableViewCellSelectionStyleGray;
cell.textLabel.highlightedTextColor = [UIColor grayColor];
return cell;
}
и когда пользователь выбирает другую строку, сохранить эту строку: [[[NSUserDefaults standardUserDefaults] objectForKey: kPreviousSelectedRow], поэтому в следующий раз он может видеть свою предыдущую выбранную строку.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:indexPath.row] forKey:kPreviousSelectedRow];
}
Журнал аварии: индекс [[[NSUserDefaults standardUserDefaults] objectForKey: kPreviousSelectedRow] integerValue] и отсчет numberOfRows. Как вы можете видеть, это не должно выходить за рамки. Я не знаю, откуда [0 ... 6].
2013-08-23 21:01:26.107 [17605:c07] index:10, count:14
2013-08-23 21:01:26.173[17605:c07] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 7 beyond bounds [0 .. 6]'
Редакция: И если я прокручивать TableView медленно, он не рухнет, если я прокручиваю это быстро, он выходит из строя. что?
сообщение об авариях здесь. – Balu
cellForRowAtIndexPath вызывается каждый раз, когда пользователь прокручивает новые ячейки на экран. Это действительно то место, где вы хотите выбрать свою ячейку? –
У меня нет другого выхода. Это подкласс UIView. –