2011-02-01 5 views
0

У меня есть 3 разных массива. 1) для идентификаторов 2) для имен 3) для электронной почты.проблема при получении выбранного значения из tableview

Я показываю имена в виде таблицы.

И отображение выбранного имени с галочкой в ​​виде таблицы.

Теперь мне нужно получить идентификатор выбранного имени и адрес электронной почты из массивов идентификаторов и электронной почты.

И этот восстановленный идентификатор и электронные письма необходимо сохранять в двух разных массивах.

для этого моего код

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 


// Customize the number of rows in the table view. 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self.sourceArray count];; 
} 


// Customize the appearance of table view cells. 
- (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.textLabel setText:[self.sourceArray objectAtIndex:indexPath.row]]; 

     if ([self.selectedArray containsObject:[agentemails objectAtIndex:indexPath.row]]){ 
      NSLog(@"111111111111"); 
      [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
     } 
     else 
     { 
      [cell setAccessoryType:UITableViewCellAccessoryNone]; 
     } 
     if ([self.selected_agentid_email containsObject:[agentids objectAtIndex:indexPath.row]]){ 
      NSLog(@"222222222222"); 
      [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
     } 
     else 
     { 
      [cell setAccessoryType:UITableViewCellAccessoryNone]; 
     } 
     if(myBoolean){ 
      [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
     } 



    return cell; 
} 


#pragma mark - 
#pragma mark Table view delegate 

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

     if ([self.selectedArray containsObject:[agentemails objectAtIndex:indexPath.row]]){ 
      NSLog(@"33333333333333"); 
      [self.selectedArray removeObjectAtIndex:[self.selectedArray indexOfObject:[agentemails objectAtIndex:indexPath.row]]]; 
     } 
     else 
     { 
      [self.selectedArray addObject:[agentemails objectAtIndex:indexPath.row]]; 
     } 
     if ([self.selected_agentid_email containsObject:[agentids objectAtIndex:indexPath.row]]){ 
      NSLog(@"4444444444444444"); 
      [self.selected_agentid_email removeObjectAtIndex:[self.selected_agentid_email indexOfObject:[agentids objectAtIndex:indexPath.row]]]; 
     } 
     else 
     { 
      [self.selected_agentid_email addObject:[agentids objectAtIndex:indexPath.row]]; 
     } 

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

но проблема я получаю,

например: если я выбрать 3 названия в Tableview я могу получить только один EMAILID и 3 идентификаторов.

Я не понял, в чем проблема.

может любой, пожалуйста, помогите мне.

Благодарим u заранее.

ответ

1

Это может быть не решение, которое вы искали, но я бы рекомендовал создать класс для хранения этих значений, поэтому вам нужно будет работать с массивом всех значений и массивом выбранных значений. Это значительно снизит сложность работы с несколькими массивами. Я на самом деле не тестировал следующий код, но это будет похоже на то, что он хотел.

//Agent.h 
@interface Agent : NSObject 
{ 
    NSString *_name; 
    NSString *_aID; 
    NSString *_email; 
} 

@property(retain) NSString *name; 
@property(retain) NSString *aID; 
@property(retain) NSString *email; 

@end 

//Agent.m 
@implementation Agent 

@synthesize name = _name; 
@synthesize aID = _aID; 
@synthesize email = _email; 

- (void) dealloc 
{ 
    [_name release]; 
    [_aID release]; 
    [_email release]; 

    [super dealloc]; 
} 

@end 

//Your selection code will then look like this 
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    Agent *agent = (Agent*)[self.allAgents objectAtIndex:indexPath.row]; 

    if (UITableViewCellAccessoryCheckmark == cell.accessoryType) { 
     [self.selectedAgents removeObject:agent]; 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 
    else { 
     [self.selectedAgents addObject:agent]; 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 

    //All 3 values are guaranteed to be there 
    NSLog(@"Agent: %@ %@ %@", agent.name, agent.aID, agent.email); 
} 
+0

Спасибо и Джо, но я не получил, где я могу дать идентификатор агента и агента email.I я не получаю с - (Недействительными) Tableview: (UITableView *) Tableview didDeselectRowAtIndexPath: (NSIndexPath *) indexPath {может у, пожалуйста, отредактируйте его с некоторым объяснением – MaheshBabu

+0

NSLog внизу кода. 'NSLog (@" Агент:% @% @% @ ", agent.name, agent.aID, agent.email);' и агент извлекается в этой строке 'Агент * агент = (Агент *) [self.allAgents objectAtIndex: indexPath.row]; ' – Joe

+0

@MahesBabu В классе агента, где он говорит' NSObject 'удалять те протоколы, которые они оставили там от меня, тестируя' tableView: didSelectRowAtIndexPath: 'Я обновил код для отражения перемены. – Joe

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