2013-11-18 5 views
-1

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

- (NSString *)getKeyForIndex:(int)index 
    { 
    return [NSString stringWithFormat:@"KEY%d",index]; 
    } 
    - (BOOL) getCheckedForIndex:(int)index 
    { 
    if([[[NSUserDefaults standardUserDefaults] valueForKey:[self getKeyForIndex:index]]boolValue]==YES) 
    { 
    return YES; 
    } 
    else 
    { 
    return NO; 

     } } 


- (void) checkedCellAtIndex:(int)index 
    { BOOL boolChecked = [self getCheckedForIndex:index]; 
     [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithBool:!boolChecked] forKey:[self getKeyForIndex:index]]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
     return List.count; 
    } 
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    { 
     static NSString *subviewCells = @"Cells"; 

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:subviewCells]; 
     if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:subviewCells]; 
     } 
     cell.textLabel.text = [List objectAtIndex:indexPath.row]; 
      return cell; 
    } 

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

     [self checkedCellAtIndex:indexPath.row]; 

     if([self getCheckedForIndex:indexPath.row]==YES) 
     { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 
     else 
    { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 
     selectLanguage = [List objectAtIndex:indexPath.row]; 
    } 
    -(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
     [self checkedCellAtIndex:indexPath.row]; 

     if([self getCheckedForIndex:indexPath.row]==NO) 
     { 

     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 
    else 

     { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 

    selectLanguage = [List objectAtIndex:indexPath.row]; 
    } 

    @end; 
+0

почему, да. именно так вы это сделаете. Что теперь? – katzenhut

ответ

15

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

Single Row:

создать новую переменную для отслеживания индекса контроллера:

int selectedIndex; 

в Метод UITableView cellForRowAtIndexPath:

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

и в UITableView методе didSelectRowAtIndex:

selectedIndex = indexPath.row; 
[tableView reloadData]; 

2, как на вас хотят:

.h файл:

NSIndexPath* checkedIndexPath; 

@property (nonatomic, retain) NSIndexPath* checkedIndexPath; 

.m файл:

@synthesize checkedIndexPath; 

    - (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]; 
     } 

     //do you stuff here 
     if([self.checkedIndexPath isEqual:indexPath]) 
     { 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     } 
     else 
     { 
      cell.accessoryType = UITableViewCellAccessoryNone; 
     } 

     return cell; 
    } 


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

     //do work for checkmark 
     if(self.checkedIndexPath) 
     { 
      UITableViewCell* uncheckCell = [tableView 
            cellForRowAtIndexPath:self.checkedIndexPath]; 
      uncheckCell.accessoryType = UITableViewCellAccessoryNone; 
     } 
     if([self.checkedIndexPath isEqual:indexPath]) 
     { 
      self.checkedIndexPath = nil; 
     } 
     else 
     { 
      UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      self.checkedIndexPath = indexPath; 
     } 
    } 

Счастливое кодирование !!

+0

Благодарю вас, сэр! Большое спасибо! :) – user2396021

+0

@ user2396021 Добро пожаловать. –

+0

ok Brother Итак, как насчет сохранения chekmark, если в первый раз я выбираю строку, то после второго раза я перезагружаю таблицу, мою строку уже chekmarked? :) – user2396021

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

  • Нет связанных вопросов^_^