2016-04-28 3 views
0

У меня есть табличное представление, получающее динамические данные от службы. Я хочу выбрать ограничение на несколько строк - это 3. Я пробовал все возможные способы, но не могу понять. Следующим является мой код. Пожалуйста, помогите мне решить эту проблему. Спасибо в AdvanceОграниченный выбор в UITableView

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    // Return the number of sections. 
    return 1; 
} 

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


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

    NSUInteger row = [indexPath row]; 

    static NSString *MyIdentifier = @"tableCell"; 

    CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 


    if (cell == nil) { 

     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; 

     for (id currentObject in topLevelObjects){ 
      if ([currentObject isKindOfClass:[UITableViewCell class]]){ 
       cell = (CustomCell *) currentObject; 

      } 
     } 

    } 

    NSDictionary *thisRow = [self.countriesArr objectAtIndex:row]; 


    if(_WSConstCountryID !=nil && ![_WSConstCountryID isEqual:@"0"] && ![_WSConstCountryID isEqual:@""] && _WSConstCountrySelectedIndex ==row ) 
    { 
     cell .accessoryType=UITableViewCellAccessoryCheckmark; 
    } 
    else { 
     cell .accessoryType=UITableViewCellAccessoryNone; 
    } 

    cell.lblTitle.text = [thisRow objectForKey:_WSColumnCountryName]; 
    NSString *str=[thisRow objectForKey:_WSColumnCountryID]; 
    NSString *stra=_WSConstCountryID; 
    if ([str isEqualToString:stra]) { 
     cell .accessoryType=UITableViewCellAccessoryCheckmark; 
     cell.highlighted=YES; 
    }else 
    { 
     cell .accessoryType=UITableViewCellAccessoryNone; 

    } 


    return cell; 


} 
#pragma mark - 
#pragma mark Table view delegate 

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


    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    NSUInteger row = [indexPath row]; 
    NSDictionary *thisRow=[self.countriesArr objectAtIndex:row]; 
    NSLog(@"%@",[thisRow description]); 


    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 



    if (cell.accessoryType == UITableViewCellAccessoryNone) 
    { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 
    else 
    { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 

    if(_WSConstCountryID!=nil && ![_WSConstCountryID isEqual:@"0"] && ![_WSConstCountryID isEqual:@""] &&_WSConstCountrySelectedIndex!=row) 
    { 

     UITableViewCell *cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:_WSConstCountrySelectedIndex inSection:0]]; 


     if (cell != nil) 
     { 
      cell .accessoryType=UITableViewCellAccessoryNone; 
     } 

    } 
    if(cell.accessoryType == UITableViewCellAccessoryCheckmark) 
    { 
     _WSConstCountryID=[thisRow objectForKey:_WSColumnCountryID]; 
     _WSConstCountryName=[thisRow objectForKey:_WSColumnCountryName]; 
     _WSConstCountrySelectedIndex=row ; 
    } 
    else 
    { 
     [email protected]"0"; 
     [email protected]"Select"; 
     _WSConstCountrySelectedIndex=-1 ; 
    } 

    [self.navigationController popViewControllerAnimated:YES]; 

} 

ответ

0

Для этого есть две вещи. 1. Поскольку вы хотите выбрать максимум из трех строк одновременно, сохраните массив для отслеживания этих номеров строк и проверьте, имеет ли этот массив номер строки в CellForRowAtIndexPath. Но _WSConstCountrySelectedIndex имеет только последний выбранный номер строки.

2.In didSelectRowAtIndex, обновите свой массив с текущим номером выбранной строки. И убедитесь, что массив не превышает число 3. Аналогично в didDeSelectRowAtIndex, когда выбранная строка отменена, удалите номер этой строки в массиве.

Это должно дать вам начало.

0

В willSelectRowAtIndexPath проверить количество выбранных строк. Если он меньше 3, чем путь индекса возврата, или возвращает значение nil.

- (nullable NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if ([tableView indexPathsForSelectedRows].count > 3) { 
     return nil; 
    } 
    return indexPath; 
} 

Надеюсь, это поможет вам.