2013-11-26 56 views
5

我有一種形式,其中用戶可以選擇一些字段,對於我選擇的項目使用[cell setAccessoryType:UITableViewCellAccessoryCheckmark];,我用過的邏輯是,我採用了emptyMutableArray,並在didSelectRowAtIndex委託方法的時候我檢查了是否選擇的indexPath存在於該emptyMutableArray中,如果它的存在意味着該項目已被選中,那麼我從該emptyMutableArray中刪除該indexPath,但是如果該indexPath不存在於其中,那麼我在該emptyMutableArray中添加indexPath。好了之後,我重新加載相同的tableView和當時在方法cellForRowAtIndexPath我再次有一個if語句設置單元格AccessoryType,其中我檢查如果indexPath存在於emptyMutableArray中,如果它存在,我將單元格的AccessoryType設置爲UITableViewCellAccessoryCheckmark我將它設置爲UITableViewCellAccessoryNone, 之後那裏問題來了,當用戶將嘗試編輯這種形式,然後我想顯示已經選擇的項目,那是什麼問題,你們都會從我的代碼理解問題。如何在編輯表單時顯示預先檢查的UITableViewCells。

這是的cellForRowAtIndexPath委託方法的代碼,決定哪些細胞應該具有對號

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    cell.selectionStyle=UITableViewCellSelectionStyleNone; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
cell.textLabel.font=[UIFont fontWithName:@"verdana" size:13]; 
cell.backgroundColor=[UIColor clearColor]; 
else if (tableView==roleTableView) { 

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

     if([emptyMutableArray containsObject:indexPath]){ 
      [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 

     } else { 
      [cell setAccessoryType:UITableViewCellAccessoryNone]; 
     } 
    } 
cell.textLabel.textColor = [UIColor darkGrayColor]; 
    return cell; 
} 

,這是從用戶決定哪些項目應選擇或取消選擇的tableView的didSelectRowAtIndexPath方法方法。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
else if (tableView==roleTableView){ 

     NSLog(@"IndexPath Obj:-%@",indexPath); 
     if([emptyMutableArray containsObject:indexPath]){ 
      [emptyMutableArray removeObject:indexPath]; 

      [roleMutableAry removeObject:[roleIdAry objectAtIndex:[roleAry indexOfObject:[NSString stringWithFormat:@"%@",[roleAry objectAtIndex:indexPath.row]]]]]; 
     } 
     else { 
      [emptyMutableArray addObject:indexPath]; 

      [roleMutableAry addObject:[roleIdAry objectAtIndex:[roleAry indexOfObject:[NSString stringWithFormat:@"%@",[roleAry objectAtIndex:indexPath.row]]]]]; 
     } 
     NSLog(@"roleMutableAry:%@",roleMutableAry); 

     if ([roleMutableAry count]==0) { 
      //[roleBtn setTitle:@"Select role" forState:UIControlStateNormal]; 
     } 
     [roleTableView reloadData]; 
     [self loadInvitees]; 
     [peoplesOfDiffRoleTableView reloadData]; 

    } 
} 

我知道這是典型的我表達確切的問題,但是,一旦你理解的代碼,我將解釋其中同時顯示已選擇(選中)項目第二次出現的問題。

+0

可能你應該清楚你想要什麼?什麼形式?等我已閱讀2次,但我無法想象你的問題。我認爲你應該將對應於單元格的「roleAry」或「roleIdAry」對象添加到「emptyMutableAry」中。之後,您可以輕鬆地將單元格的標題值與「emptyMutableAry」中的標題值進行比較。 –

回答

0

您不能依賴IndexPath來設置單元格的某些屬性,因爲這些單元格會被重用。我從你的問題中瞭解到,你想跟蹤已被選中的單元格,並且希望表格視圖相應地顯示附件類型。爲此,你應該有一個數組,其中將包含一個屬性爲「isSelected」或任何你想要的對象。此屬性將幫助您根據其值設置您的配件類型。在你的cellForRowAtIndex中,你需要從數組中取出相應的對象,並檢查屬性「isSelected」或你定義的任何東西,並相應地設置單元的附件類型。我希望這能幫到您。乾杯!

相關問題