2016-07-26 15 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を返します。代わりに、if [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が削除されますか?

関連する問題