2016-07-26 85 views
-1

您好,我嘗試了堆棧溢出的多個答案,但是當我滾動表格視圖時,附件複選標記消失時,我向上或向下滾動。UITableView隱藏附件複選標記向上滾動或向下滾動

This One

我的代碼---

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
PackageTableCell *cell = (PackageTableCell *)[tableView dequeueReusableCellWithIdentifier:packageCell]; 

if (cell == nil) 
{ 
    cell = [[PackageTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:packageCell]; 
} 
cell.backgroundColor = [UIColor whiteColor]; 
cell.selectionStyle = UITableViewCellSelectionStyleNone; 

JobAndPackDetails *objJobAndPackDetails =[self.arrayOfJobList objectAtIndex:indexPath.row]; 

if ([objJobAndPackDetails.jobType isEqualToString:@"JPK"]) 
{ 
    [cell.imgJPK setImage:[UIImage imageNamed:@"vs_package.png"]]; 
} 
else{ 
    [cell.imgJPK setImage:nil]; 
} 
NSIndexPath *indexPathP = [self.tableView indexPathForSelectedRow]; 
[self.tableView selectRowAtIndexPath:indexPathP animated:NO scrollPosition:UITableViewScrollPositionNone]; 

NSNumber *rowNsNum = [NSNumber numberWithInteger:indexPath.row]; 

if ([self.arrayOfJobList containsObject:rowNsNum] ) 
{ 
    cell.accessoryType = UITableViewCellAccessoryCheckmark ; 
} 
else 
{ 
    cell.accessoryType = UITableViewCellAccessoryNone; 
} 


[cell.lblJobName setText:objJobAndPackDetails.jobName]; 
[cell.lblJobDescription setText:objJobAndPackDetails.jobDesc]; 
[cell.lblJobCreated setText:objJobAndPackDetails.jobType]; 
[cell.lblJobSK setText:[NSString stringWithFormat:@"%.0f",objJobAndPackDetails.jobSK]]; 
[cell.imgVehicle setImage:[UIImage imageNamed:@"placeholder.png"]]; 

return cell; 
} 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)path 
{ 
PackageTableCell *cell = [tableView cellForRowAtIndexPath:path]; 
NSString *str_JobType = cell.lblJobCreated.text; 
NSString *str_JobSK = cell.lblJobSK.text; 


if (cell.accessoryType == UITableViewCellAccessoryCheckmark) 
{ 
    cell.accessoryType = UITableViewCellAccessoryNone; 
    if ([str_JobType isEqualToString:@"JOB"]) 
    { 
     [self.array_Job removeLastObject]; 
     [self.array_JobSK removeLastObject]; 
     NSLog(@"JOB :%@",self.array_Job); 
     NSLog(@"JOB_SK :%@",self.array_JobSK); 

    } 
    else 
    { 
     [self.array_Package removeLastObject]; 
     [self.array_PackageSK removeLastObject]; 

     NSLog(@"PACKAGE :%@",self.array_Package); 
     NSLog(@"Package_SK :%@",self.array_PackageSK); 
    } 
} 
else 
{ 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    NSLog(@"Selected Job Type Text :%@",str_JobType); 


    if ([str_JobType isEqualToString:@"JOB"]) 
    { 
     [self.array_Job addObject:str_JobType]; 
     [self.array_JobSK addObject:str_JobSK]; 

     NSLog(@"JOB :%lu",(unsigned long)self.array_Job.count); 
     NSLog(@"JOB_SK :%@",self.array_JobSK); 



     NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary]; 

     for (int i = 1; i <= self.array_Job.count; i ++) 
     { 
      [tmpDict setObject:[NSString stringWithFormat:@"%d",0] forKey:@"AppointmentJobSK"]; 
      [tmpDict setObject:[NSString stringWithFormat:@"%d",0] forKey:@"AppointmentSK"]; 
      [tmpDict setObject:str_JobType forKey:@"JobType"]; 
      [tmpDict setObject:str_JobSK forKey:@"JobTypeSK"]; 
      [tmpDict setObject:[NSString stringWithFormat:@"%d",5] forKey:@"UserCreated"]; 
      [tmpDict setObject:[NSString stringWithFormat:@"2016-04-14 10:00:00"] forKey:@"DateCreated"]; 

      NSMutableArray *dictAllKeys=[NSMutableArray arrayWithArray:[tmpDict allKeys]]; 
      NSMutableArray *dictAllValues=[NSMutableArray arrayWithArray:[tmpDict allValues]]; 
      Job_keysAndValues=[NSMutableArray arrayWithArray:[dictAllKeys arrayByAddingObjectsFromArray:dictAllValues]]; 
      NSLog(@"Key and Values :%@",Job_keysAndValues); 
     } 
     Job_dict = tmpDict; 
     NSLog(@"Dict :%@",Job_dict); 
    } 
    else 
    { 
     [self.array_Package addObject:str_JobType]; 
     [self.array_PackageSK addObject:str_JobSK]; 

     NSLog(@"PACKAGE :%@",self.array_Package); 
     NSLog(@"Package_SK :%@",self.array_PackageSK); 

     NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary]; 
     for (int i = 1; i <= self.array_Package.count; i ++) 
     { 
      [tmpDict setObject:[NSString stringWithFormat:@"%d",0] forKey:@"AppointmentJobSK"]; 
      [tmpDict setObject:[NSString stringWithFormat:@"%d",0] forKey:@"AppointmentSK"]; 
      [tmpDict setObject:str_JobType forKey:@"JobType"]; 
      [tmpDict setObject:str_JobSK forKey:@"JobTypeSK"]; 
      [tmpDict setObject:[NSString stringWithFormat:@"%d",5] forKey:@"UserCreated"]; 
      [tmpDict setObject:[NSString stringWithFormat:@"2016-04-14 10:00:00"] forKey:@"DateCreated"]; 

      NSMutableArray *dictAllKeys=[NSMutableArray arrayWithArray:[tmpDict allKeys]]; 
      NSMutableArray *dictAllValues=[NSMutableArray arrayWithArray:[tmpDict allValues]]; 
      Package_keysAndValues=[NSMutableArray arrayWithArray:[dictAllKeys arrayByAddingObjectsFromArray:dictAllValues]]; 
     } 
     Package_dict = tmpDict; 
     NSLog(@"Dict :%@",Package_dict); 

    } 

    NSMutableDictionary *merged = Job_dict.mutableCopy; 
    [merged addEntriesFromDictionary: Package_dict]; 
    NSLog(@"Package Dict:%@",merged); 
} 

} 
+1

與往常一樣,**不要**濫用'didSelectRowAtIndexPath'中的視圖(單元格)。設計你的模型(數據源數組)來鏡像配件類型的狀態。然後更改模型並重新加載視圖。 – vadian

+0

你不應該檢查數組爲[self.arrayOfJobList containsObject:rowNsNum],因爲如果該對象存在於數組中,則每次都會返回TRUE,而應該如果([[self.arrayOfJobList objectAtIndex:indexPath.row] isEqualTo:@「選中「/ @」未選中「])。 –

+0

@vadian我同意你可以根據我的問題給出提示,我應該如何重新設計數據源的模型 – ChenSmile

回答

0

看來,在的tableView:的cellForRowAtIndexPath:你在arrayOfJobList正在檢查的信息,閹羊的細胞應該有標誌或沒有。但是,在tableView:didSelectRowAtIndexPath中:您沒有在arrayOfJobList中存儲關於它被選中的任何信息。

另外,在旁註中,取消選擇時,您將從array_Job,array_JobSK,array_Package和array_PackageSK中刪除最後一個項目,但是您不檢查取消選擇的項目是否實際上是放入該數組中的最後一個項目? 例如,如果您選擇單元格項A,B和C,請取消選擇A,那麼您會從這些陣列中刪除C?

相關問題