Двойной выбор uitableviewcell в Custom Cell - PullRequest
0 голосов
/ 11 августа 2011

У меня проблема с UitableViewCell.проблема в том, что я сделал пользовательскую ячейку, и у меня есть кнопка изображения флажка в этой ячейке.я проверяю и снимаю галочкуон работает нормально, но проблема в том, что когда я выбираю строку № 1. он также выбирает строку № 10, то же самое происходит и с другими строками, как для 2, он автоматически выбирает строку № 11. Я показываю 10 строк за раз.

вот мой код для CellForIndexPath

static NSString *cellIdentifier = @"Cell";
InterestsTableViewCell *cell = (InterestsTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell==nil) {
    NSArray *arrayNibs = [[NSBundle mainBundle] loadNibNamed:@"InterestsTableViewCell" owner:self options:nil];
    cell = [arrayNibs objectAtIndex:0];
    cell.delegate = self;
    cell.total = [dataArray count];
}

cell.tag = indexPath.row;

cell.lblTitle.text = [dataArray objectAtIndex:indexPath.row];

if (indexPath.row==0) {
    cell.imgBg.image = [UIImage imageNamed:@"tableCell_top_default.png"];
}else if(indexPath.row == [dataArray count]-1){
    cell.imgBg.image = [UIImage imageNamed:@"tableCell_bottom_default.png"];
}else{
    cell.imgBg.image = [UIImage imageNamed:@"tableCell_middle_default.png"];
}

return cell;

Плюс я обнаруживаю касание, чтобы я мог изменить фоновое изображение (у меня есть другое изображение в качестве фона).Код для сенсорного ввода начался (в пользовательской ячейке ниже)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
//NSLog(@"%i",tag);
isSelected = !isSelected;

btnTickMark.selected = !btnTickMark.selected;
(isSelected ?  (onImage = YES) : (onImage = NO));

Может кто-нибудь помочь мне в этом вопросе, почему 2 строки выбираются, когда я щелкаю строку.

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 11 августа 2011

Это потому, что UITableView удаляет ячейку из очереди.Поскольку вы показываете 10 строк на экране, он полностью умещается, эта строка 11 выглядит проверенной, поскольку она исключена из строки 1.

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

0 голосов
/ 11 августа 2011

Быстрое исправление - измените эту строку с

InterestsTableViewCell *cell = (InterestsTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

на

InterestsTableViewCell *cell = nil;

Это плохо с точки зрения памяти / эффективности, потому что вы не будете использовать ячейки повторно, вместо этогокаждый раз перезагружать по одному из nib - но это покажет, правильно ли то, что говорит Флориан Мильке (и его рекомендуемый подход обеспечит лучшее решение в долгосрочной перспективе).

0 голосов
/ 11 августа 2011

Попробуйте это:

NSArray *arrayNibs = [[NSBundle mainBundle] loadNibNamed:@"InterestsTableViewCell" owner:self options:nil];
for (id currentObject in arrayNibs){
    if ([currentObject isKindOfClass:[UITableViewCell class]]){
        cell =  (InterestsTableViewCell *) currentObject;
        cell.Delegate = self;
        cell.total = [dataArray count];
        break;
    }
}

и дайте мне знать, если это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...