2017-02-18 5 views
1

Я новичок в прошивке и я перед проблемой относительно выбора и снимите табличное cell.For Deselect я использовал didDeSelectRowAtIndexPath но не получить называютdidDeSelectRowAtIndexPath не получает вызов в объективных с

Моим кода выглядит так

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 
    cell.textLabel.text=[NSString stringWithFormat:@"%@",[reportshortActivityarray objectAtIndex:indexPath.row]]; 

    if([Selectedarray containsObject:[reportshortActivityarray objectAtIndex:indexPath.row]]) 
    { 
     [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
    } 
    else 
    { 
     [cell setAccessoryType:UITableViewCellAccessoryNone]; 
    } 

    return cell; 
} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [activitytable cellForRowAtIndexPath:indexPath]; 

    if(![Selectedarray containsObject:[reportshortActivityarray objectAtIndex:indexPath.row]]){ 
     [Selectedarray addObject:[reportshortActivityarray objectAtIndex:indexPath.row]]; 
     txtactivity.text = [Selectedarray componentsJoinedByString:@","]; 
     DefaultActivityString=txtactivity.text; 
    } 

    NSLog(@"Selected Value =%@",txtactivity.text); 

    if(![SelectedIDarray containsObject:[reportidActivityarray objectAtIndex:indexPath.row]]){ 
     [SelectedIDarray addObject:[reportidActivityarray objectAtIndex:indexPath.row]]; 
     lblactivity.text = [SelectedIDarray componentsJoinedByString:@","]; 
    } 

    NSLog(@"Selected Value =%@",lblactivity.text); 

    if (cell.selected) { 
     // ... Uncheck 
     [activitytable deselectRowAtIndexPath:indexPath animated:YES]; 
    } 


    [[activitytable cellForRowAtIndexPath:indexPath] setAccessoryType:UITableViewCellAccessoryCheckmark]; 
    activitytable.hidden=NO; 
} 

- (void)tableView:(UITableView *)tableView didDeSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 


    if([Selectedarray containsObject:[reportshortActivityarray objectAtIndex:indexPath.row]]){ 
     [Selectedarray removeObject:[reportshortActivityarray objectAtIndex:indexPath.row]]; 
     txtactivity.text = [Selectedarray componentsJoinedByString:@","]; 
    } 

    if([SelectedIDarray containsObject:[reportidActivityarray objectAtIndex:indexPath.row]]){ 
     [SelectedIDarray removeObject:[reportidActivityarray objectAtIndex:indexPath.row]]; 
     lblactivity.text = [SelectedIDarray componentsJoinedByString:@","]; 
    } 
    NSLog(@"Selected Value =%@",lblactivity.text); 

    [[activitytable cellForRowAtIndexPath:indexPath] setAccessoryType:UITableViewCellAccessoryNone]; 
    activitytable.hidden=NO; 
} 

Я использую этот код для выбора и отменив его выбор правильно, но не deselect.I видел много решения на гугле, но ничего не помогает мне.

enter image description here

Как на картинке, я могу выбрать строку, но не в состоянии отменить it.Thanks заранее!

+0

Вы пытаетесь создать массив выбранных ячеек? но здесь вы делаете ошибку typo, поскольку пользователь vadian предложил свой 'didDeselectRowAtIndexPath'. – vaibhav

+0

@vaibhav ok позвольте мне проверить .... – Muju

+0

Можете ли вы показать мне, как вы настраиваете делегатов? Кажется, что у вас dataSource вызывает беспокойство, но tableview.delegate действует weird – EmilDo

ответ

3

Настоятельно рекомендуется использовать автозавершение кода. Это даст вам правильное написание (случай имеет значение!):

...didDeselect...

Обратите внимание на строчную сек избранника

+0

ok дайте мне проверить ... – Muju

+1

Кроме того, он отбирает программно '[activitytable deselectRowAtIndexPath: indexPath animated: YES];' что означает, что 'didDeselectRowAtIndexPath' выиграл Вероятно, его можно назвать. – Sulthan

+0

@vadian Отмечается случившееся .... – Muju

-2

Просто напишите в методе

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

    ... 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    ... 

} 
1

Если я правильно помню, есть нелогичный механизм для этого: Если вы не включите , то разрешитеMultipleSelection свойства TableView, этот метод протокола не будет запущен. Дайте ему шанс, если вы все еще не решили.

+0

Я уже включил это. – Muju

0

Я проверю ваш код, я думаю, что вы хотите сделать меню, когда щелкнете элемент меню, вызовите метод didselectrow и измените тип аксессуаров ячейки, чтобы отметить, когда второй раз щелкните тот же или другой элемент, измените атрибут принадлежности на none , однако вы нажимаете элемент первый или второй раз, если хотите изменить тип сокета ячейки, сделайте знак BOOL для модели в массиве данных, чтобы сохранить статус элемента меню. в методе didselectrow, изменить марку модели, а затем reloaddata.don't не нужен какой-либо код в diddeselectrow метод. у вас были некоторые ошибки при понимании метода diddeselectrow.

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