2013-08-12 2 views
0

У меня есть следующий код в моем методе didSelectRowAtIndexPath: и я хочу, чтобы пользователь мог нажать на ячейку, показать ячейку флажка и добавить выбранные ячейки в отдельный массив. Я также хотел бы, чтобы пользователь мог использовать уже выбранную ячейку, которая затем уберет галочку и удалит ее из массива.Выбор ячеек и их перемещение в отдельный массив?

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.setupTable deselectRowAtIndexPath:indexPath animated:YES]; 

    SetupCell *cell = (SetupCell*)[tableView cellForRowAtIndexPath:indexPath]; 

    NSLog(@"Feed name: %@", cell.setupFeedName.text); 

    if ([self.selectedCells containsObject:cell.setupFeedName.text]) { 
     [self.selectedCells removeObjectAtIndex:indexPath.row]; 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } else { 
     [self.selectedCells addObject:cell.setupFeedName.text]; 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 

    [self.setupTable reloadData]; 

    NSLog(@"%i cells are selected.", [self.selectedCells count]); 
    NSLog(@"%i cells are not selected.", [self.setupFeeds count]); 

} 

NSLog выводит следующее:

2013-08-12 07:04:58.767 [13921:c07] Feed name: Politico 
2013-08-12 07:04:58.768 [13921:c07] 0 cells are selected. 
2013-08-12 07:04:58.769 [13921:c07] 6 cells are not selected. 

ОБНОВЛЕНИЕ:

Вот что показывает консоль:

2013-08-12 07:31:40.390[14117:c07] Feed name: Huffington Post 
2013-08-12 07:31:40.392[14117:c07] 5 cells are selected. 
2013-08-12 07:31:40.392[14117:c07] 6 cells are not selected. 

Вот код:

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.setupTable deselectRowAtIndexPath:indexPath animated:YES]; 

    SetupCell *cell = (SetupCell*)[tableView cellForRowAtIndexPath:indexPath]; 

    NSLog(@"Feed name: %@", cell.setupFeedName.text); 

    if ([[self.selectedCells objectAtIndex:indexPath.row] isEqualToString:cell.setupFeedName.text]) { 
     [self.selectedCells removeObjectAtIndex:indexPath.row]; 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } else { 
     [self.selectedCells addObject:cell.setupFeedName.text]; 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 

    NSLog(@"%i cells are selected.", [self.selectedCells count]); 
    NSLog(@"%i cells are not selected.", [self.setupFeeds count]); 

    [self.setupTable reloadData]; 

} 
+0

Попробуйте NSLog Перед перезагрузкой. и в чем именно проблема? –

+0

Тогда что происходит в вашем случае? – Ashwani

+0

Вы инициализируете self.selectedCells? если да, то где? – iProgrammer

ответ

1

Вам необходимо создать массив, в котором хранятся выбранные ячейки. И сохраните дорожку выбранных ячеек. Если ячейка снова нажата, удалите эту конкретную ячейку из массива.

Возьмите подробную информацию example given

+0

Умм ... это то, что я пытаюсь сделать. Пожалуйста, присмотритесь к моему коду. Я пытаюсь добавить выбранные ячейки в отдельный массив. –

+0

checkout пример ссылки, вы получите свое решение –

+0

Хорошо, это сработало! Но как я могу напечатать, сколько выделенных ячеек и сколько не выбранных ячеек есть в Консоли? –

0

Я сделал это ниже, но я взял пользовательские кнопки на ячейке, чтобы установить флажок.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier"; 

UITableViewCell * cell = 
[tableHistory dequeueReusableCellWithIdentifier: SimpleTableIdentifier]; 

if (cell == nil) { 

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:SimpleTableIdentifier] autorelease]; 
} 

else 
{ 

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:SimpleTableIdentifier] autorelease]; 
} 

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

[button setFrame:CGRectMake(270.0, 7.0, 30.0, 30.0)]; 

if([[arrayCheckUnchek objectAtIndex:indexPath.row] isEqualToString:@"check"]) 

[button setImage:[UIImage imageNamed:@"right-with-bg.png"] forState:UIControlStateNormal]; 
else 
[button setImage:[UIImage imageNamed:@"tick-bg.png"] forState:UIControlStateNormal]; 

[button addTarget:self action:@selector(buttonClicked:)forControlEvents:UIControlEventTouchUpInside]; 

[cell.contentView addSubview:button]; 


cell.textLabel.text = [cellDataArray objectAtIndex:indexPath.row]; 

cell.detailTextLabel.text = [arrayTktcode objectAtIndex:indexPath.row]; 

cell.selectionStyle = UITableViewCellSelectionStyleNone; 

[cell addSubview:btnUnScan]; 

[cell addSubview:btnUScan]; 

return cell; 

} 

-(void)buttonClicked:(id)sender 
{ 

CGPoint touchPoint = [sender convertPoint:CGPointZero toView:tableHistory]; 
NSIndexPath *indexPath = [tableHistory indexPathForRowAtPoint:touchPoint]; 

UIButton *button = (UIButton *)sender; 

if([[arrayCheckUnchek objectAtIndex:indexPath.row] isEqualToString:@"Uncheck"]) 
{ 
[button setImage:[UIImage imageNamed:@"right-with-bg.png"] forState:UIControlStateNormal]; 
[arrayCheckUnchek replaceObjectAtIndex:indexPath.row withObject:@"check"]; 
} 
else 
{ 
[button setImage:[UIImage imageNamed:@"tick-bg.png"] forState:UIControlStateNormal]; 
[arrayCheckUnchek replaceObjectAtIndex:indexPath.row withObject:@"Uncheck"]; 
} 
} 

проверка this also.

+0

См. Мой обновленный вопрос. –

+0

Можете ли вы сказать, что именно вы хотите, я все еще не получил ваше требование должным образом? –

0
// use this in didSelectRow 
    NSUInteger index = [self.selectedCells indexOfObject:cell.setupFeedName.text]; 
    if (index != NSNotFound) { 
     [self.selectedCells removeObjectAtIndex:indexPath.row]; 
      cell.accessoryType = UITableViewCellAccessoryNone; 
    } 
    else 

    { 
    [self.selectedCells addObject:cell.setupFeedName.text]; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 
Смежные вопросы