为什么在重新加载目标c中的表视图时,所选值将被取消select

我是iOS新手,在自定义表格视图中遇到问题。 我正在使用自定义表格视图单元格

AuditTableviewcell.h { NSString *ActualString; IBOutlet UIButton *infobtn; UITextField * alertTextField; UITextView *textView1; UILabel *lbl; } -(IBAction)passbtnClick:(id)sender; -(IBAction)failbtnClick:(id)sender; -(IBAction)wipbtnClick:(id)sender; -(IBAction)nabtnClick:(id)sender; -(IBAction)infobtnClick:(id)sender; @property(nonatomic,strong)IBOutlet UILabel *audittitlelbl; @property(nonatomic,strong)IBOutlet UILabel *listlbl; @property(nonatomic,strong) IBOutlet UILabel *passlbl; @property(nonatomic,strong) IBOutlet UILabel *faillbl; @property(nonatomic,strong) IBOutlet UILabel *warninglbl; @property(nonatomic,strong) IBOutlet UILabel *nalbl; @property(nonatomic,strong) IBOutlet UILabel *actuallbl; @property(nonatomic,strong) IBOutlet UILabel *nameidlbl; @property(nonatomic,strong) IBOutlet UILabel *remarklbl; @property(nonatomic,strong) IBOutlet UIButton *passbtn; @property(nonatomic,strong) IBOutlet UIButton *failbtn; @property(nonatomic,strong) IBOutlet UIButton *wipbtn; @property(nonatomic,strong) IBOutlet UIButton *nabtn; 

AuditTableviewcell.m

 @synthesize audittitlelbl,listlbl,passbtn,nabtn,passlbl,faillbl,warninglbl,nalbl,actuallbl,failbtn,wipbtn,nameidlbl; - (void)awakeFromNib { passbtn.layer.cornerRadius = passbtn.bounds.size.width / 2.0;// this value vary as per your desire passbtn.clipsToBounds = YES; failbtn.layer.cornerRadius = failbtn.bounds.size.width / 2.0;// this value vary as per your desire failbtn.clipsToBounds = YES; wipbtn.layer.cornerRadius = wipbtn.bounds.size.width / 2.0;// this value vary as per your desire wipbtn.clipsToBounds = YES; nabtn.layer.cornerRadius = nabtn.bounds.size.width / 2.0;// this value vary as per your desire nabtn.clipsToBounds = YES; infobtn.layer.cornerRadius = infobtn.bounds.size.width / 2.0;// this value vary as per your desire [[infobtn layer] setBorderWidth:1.0f]; infobtn.layer.borderColor =[[UIColor blueColor] CGColor]; infobtn.clipsToBounds = YES; passlbl.hidden=YES; faillbl.hidden=YES; warninglbl.hidden=YES; nalbl.hidden=YES; actuallbl.hidden=YES; nameidlbl.hidden=YES; // Initialization code } - (void)textViewDidEndEditing:(UITextView *)theTextView { if (![textView1 hasText]) { lbl.hidden = NO; } } - (void) textViewDidChange:(UITextView *)textView { if(![textView hasText]) { lbl.hidden = NO; } else{ lbl.hidden = YES; } } -(IBAction)passbtnClick:(id)sender { passbtn.backgroundColor=[UIColor greenColor]; failbtn.backgroundColor=[UIColor lightGrayColor]; wipbtn.backgroundColor=[UIColor lightGrayColor]; nabtn.backgroundColor=[UIColor lightGrayColor]; actuallbl.text=passlbl.text; ActualString=actuallbl.text; } -(IBAction)failbtnClick:(id)sender { passbtn.backgroundColor=[UIColor lightGrayColor]; failbtn.backgroundColor=[UIColor redColor]; wipbtn.backgroundColor=[UIColor lightGrayColor]; nabtn.backgroundColor=[UIColor lightGrayColor]; actuallbl.text=faillbl.text; ActualString=actuallbl.text; NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; [defaults setObject:ActualString forKey:@"ActualStringCustom"]; UIAlertView *testAlert = [[UIAlertView alloc] initWithTitle:@"Fail!" message:audittitlelbl.text delegate:self cancelButtonTitle:nil otherButtonTitles:@"Done", nil]; textView1 = [UITextView new]; lbl = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0,90.0, 34.0)]; [lbl setText:@"Enter Remark"]; [lbl setFont:[UIFont systemFontOfSize:12]]; [lbl setBackgroundColor:[UIColor clearColor]]; [lbl setTextColor:[UIColor lightGrayColor]]; textView1.delegate = self; [textView1 addSubview:lbl]; [testAlert setValue: textView1 forKey:@"accessoryView"]; [testAlert show]; } -(IBAction)wipbtnClick:(id)sender { passbtn.backgroundColor=[UIColor lightGrayColor]; failbtn.backgroundColor=[UIColor lightGrayColor]; wipbtn.backgroundColor=[UIColor orangeColor]; nabtn.backgroundColor=[UIColor lightGrayColor]; actuallbl.text=warninglbl.text; ActualString=actuallbl.text; UIAlertView *testAlert = [[UIAlertView alloc] initWithTitle:@"Warning!" message:audittitlelbl.text delegate:self cancelButtonTitle:nil otherButtonTitles:@"Done", nil]; textView1 = [UITextView new]; lbl = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0,90.0, 34.0)]; [lbl setText:@"Enter Remark"]; [lbl setFont:[UIFont systemFontOfSize:12]]; [lbl setBackgroundColor:[UIColor clearColor]]; [lbl setTextColor:[UIColor lightGrayColor]]; textView1.delegate = self; [textView1 addSubview:lbl]; [testAlert setValue: textView1 forKey:@"accessoryView"]; [testAlert show]; } - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { if(buttonIndex==0) { } } -(IBAction)nabtnClick:(id)sender { passbtn.backgroundColor=[UIColor lightGrayColor]; failbtn.backgroundColor=[UIColor lightGrayColor]; wipbtn.backgroundColor=[UIColor lightGrayColor]; nabtn.backgroundColor=[UIColor blueColor]; actuallbl.text=nalbl.text; ActualString=actuallbl.text; } -(IBAction)infobtnClick:(id)sender { UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"info" message:@"Information to be displayed" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; } 

ViewController.m

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *STI=@"STI"; AuditTableViewCell *cell = (AuditTableViewCell *)[tableView dequeueReusableHeaderFooterViewWithIdentifier:STI]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AuditTableViewCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; cell.accessoryType=UITableViewCellAccessoryNone; } cell.audittitlelbl.text=[NSString stringWithFormat:@"%@",[idarray objectAtIndex:indexPath.row]]; cell.nameidlbl.text=[NSString stringWithFormat:@"%@",[CheckpointNameIDArray objectAtIndex:indexPath.row]]; cell.passlbl.text=[NSString stringWithFormat:@"%@",[Passarray objectAtIndex:indexPath.row]]; cell.faillbl.text=[NSString stringWithFormat:@"%@",[Failarray objectAtIndex:indexPath.row]]; cell.warninglbl.text=[NSString stringWithFormat:@"%@",[Warningarray objectAtIndex:indexPath.row]]; cell.nalbl.text=[NSString stringWithFormat:@"%@",[NAarray objectAtIndex:indexPath.row]]; [cell.passbtn addTarget:self action:@selector(btnQuantityPressedPass:) forControlEvents:UIControlEventTouchUpInside]; [cell.failbtn addTarget:self action:@selector(btnQuantityPressedFail:) forControlEvents:UIControlEventTouchUpInside]; [cell.wipbtn addTarget:self action:@selector(btnQuantityPressedWarning:) forControlEvents:UIControlEventTouchUpInside]; [cell.nabtn addTarget:self action:@selector(btnQuantityPressedNA:) forControlEvents:UIControlEventTouchUpInside]; [cell.contentView.layer setBorderColor:[UIColor blackColor].CGColor]; [cell.contentView.layer setBorderWidth:0.5f]; return cell; } //TODO: PassButton from Cell method -(void)btnQuantityPressedPass:(UIButton *)sender { AuditTableViewCell *cell = sender.superview.superview; NSString *String =cell.actuallbl.text; NSString *String2=cell.nameidlbl.text; NSString *FailString=@""; NSString *WarningString=@""; NSLog(@"String =%@",String); NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; [defaults setObject:String forKey:@"ActualStringCustom"]; [defaults setObject:String2 forKey:@"CheckPointNameID"]; NSManagedObjectContext *context = [self managedObjectContext]; NSError *error; NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"AuditPost" inManagedObjectContext:context]]; // NSError *error = nil; NSArray *results = [context executeFetchRequest:request error:&error]; NSLog(@"Result =%@",results); ComplareArray=[devices valueForKey:@"checkpointid"]; BOOL contains = [ComplareArray containsObject:String2]; if(contains == NO) { if (self.device) { // Update existing device [device setValue:Audit forKey:@"auditnameId"]; [device setValue:String forKey:@"checklistid"]; [device setValue:String2 forKey:@"checkpointid"]; [device setValue:FailString forKey:@"failreason"]; [device setValue:WarningString forKey:@"warningreason"]; [device setValue:AuditStartDate forKey:@"starttimedate"]; [device setValue:userid forKey:@"userid"]; NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } else { // Create a new device NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"AuditPost" inManagedObjectContext:context]; [newDevice setValue:Audit forKey:@"auditnameId"]; [newDevice setValue:String forKey:@"checklistid"]; [newDevice setValue:String2 forKey:@"checkpointid"]; [newDevice setValue:FailString forKey:@"failreason"]; [newDevice setValue:WarningString forKey:@"warningreason"]; [newDevice setValue:AuditStartDate forKey:@"starttimedate"]; [newDevice setValue:userid forKey:@"userid"]; NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } } else { NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } /// NSManagedObjectContext *context = [self managedObjectContext]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"AuditPost" inManagedObjectContext:context]]; // NSError *error = nil; NSArray *results = [context executeFetchRequest:request error:&error]; NSManagedObject* favoritsGrabbed = [results objectAtIndex:CurrentIndexPath]; [favoritsGrabbed setValue:String forKey:@"checklistid"]; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } } //TODO: FailButton from Cell method -(void)btnQuantityPressedFail:(UIButton *)sender { AuditTableViewCell *cell = sender.superview.superview; NSString *String =cell.actuallbl.text; NSString *String2=cell.nameidlbl.text; NSLog(@"String =%@",String); NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; [defaults setObject:String forKey:@"ActualStringCustom"]; [defaults setObject:String2 forKey:@"CheckPointNameID"]; NSString *FailString=@""; NSString *WarningString=@""; NSManagedObjectContext *context = [self managedObjectContext]; NSError *error; NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"AuditPost" inManagedObjectContext:context]]; // NSError *error = nil; NSArray *results = [context executeFetchRequest:request error:&error]; NSLog(@"Result =%@",results); ComplareArray=[devices valueForKey:@"checkpointid"]; BOOL contains = [ComplareArray containsObject:String2]; if(contains == NO) { if (self.device) { // Update existing device [device setValue:Audit forKey:@"auditnameId"]; [device setValue:String forKey:@"checklistid"]; [device setValue:String2 forKey:@"checkpointid"]; [device setValue:FailString forKey:@"failreason"]; [device setValue:WarningString forKey:@"warningreason"]; [device setValue:AuditStartDate forKey:@"starttimedate"]; [device setValue:userid forKey:@"userid"]; NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } else { // Create a new device NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"AuditPost" inManagedObjectContext:context]; [newDevice setValue:Audit forKey:@"auditnameId"]; [newDevice setValue:String forKey:@"checklistid"]; [newDevice setValue:String2 forKey:@"checkpointid"]; [newDevice setValue:FailString forKey:@"failreason"]; [newDevice setValue:WarningString forKey:@"warningreason"]; [newDevice setValue:AuditStartDate forKey:@"starttimedate"]; [newDevice setValue:userid forKey:@"userid"]; NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } } else { NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } /// NSManagedObjectContext *context = [self managedObjectContext]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"AuditPost" inManagedObjectContext:context]]; // NSError *error = nil; NSArray *results = [context executeFetchRequest:request error:&error]; NSManagedObject* favoritsGrabbed = [results objectAtIndex:CurrentIndexPath]; [favoritsGrabbed setValue:String forKey:@"checklistid"]; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } } //TODO: WarningButton from Cell method -(void)btnQuantityPressedWarning:(UIButton *)sender { AuditTableViewCell *cell = sender.superview.superview; NSIndexPath *indexPath = [Audittable indexPathForCell:cell]; CurrentIndexPath=indexPath.row; // NSLog(@"%@",cell.actuallbl.text); NSString *String =cell.actuallbl.text; NSString *String2=cell.nameidlbl.text; NSLog(@"String =%@",String); NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; [defaults setObject:String forKey:@"ActualStringCustom"]; [defaults setObject:String2 forKey:@"CheckPointNameID"]; NSString *FailString=@""; NSString *WarningString=@""; NSManagedObjectContext *context = [self managedObjectContext]; NSError *error; NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"AuditPost" inManagedObjectContext:context]]; // NSError *error = nil; NSArray *results = [context executeFetchRequest:request error:&error]; NSLog(@"Result =%@",results); ComplareArray=[devices valueForKey:@"checkpointid"]; BOOL contains = [ComplareArray containsObject:String2]; if(contains == NO) { if (self.device) { // Update existing device [device setValue:Audit forKey:@"auditnameId"]; [device setValue:String forKey:@"checklistid"]; [device setValue:String2 forKey:@"checkpointid"]; [device setValue:FailString forKey:@"failreason"]; [device setValue:WarningString forKey:@"warningreason"]; [device setValue:AuditStartDate forKey:@"starttimedate"]; [device setValue:userid forKey:@"userid"]; NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } else { // Create a new device NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"AuditPost" inManagedObjectContext:context]; [newDevice setValue:Audit forKey:@"auditnameId"]; [newDevice setValue:String forKey:@"checklistid"]; [newDevice setValue:String2 forKey:@"checkpointid"]; [newDevice setValue:FailString forKey:@"failreason"]; [newDevice setValue:WarningString forKey:@"warningreason"]; [newDevice setValue:AuditStartDate forKey:@"starttimedate"]; [newDevice setValue:userid forKey:@"userid"]; NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } } else { NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } /// NSManagedObjectContext *context = [self managedObjectContext]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"AuditPost" inManagedObjectContext:context]]; // NSError *error = nil; NSArray *results = [context executeFetchRequest:request error:&error]; NSManagedObject* favoritsGrabbed = [results objectAtIndex:CurrentIndexPath]; [favoritsGrabbed setValue:String forKey:@"checklistid"]; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } } //TODO: NAButton from Cell method -(void)btnQuantityPressedNA:(UIButton *)sender { AuditTableViewCell *cell = sender.superview.superview; // NSLog(@"%@",cell.actuallbl.text); NSString *String =cell.actuallbl.text; NSString *String2=cell.nameidlbl.text; NSLog(@"String =%@",String); NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; [defaults setObject:String forKey:@"ActualStringCustom"]; [defaults setObject:String2 forKey:@"CheckPointNameID"]; NSString *FailString=@""; NSString *WarningString=@""; NSManagedObjectContext *context = [self managedObjectContext]; NSError *error; NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"AuditPost" inManagedObjectContext:context]]; // NSError *error = nil; NSArray *results = [context executeFetchRequest:request error:&error]; NSLog(@"Result =%@",results); ComplareArray=[devices valueForKey:@"checkpointid"]; BOOL contains = [ComplareArray containsObject:String2]; if(contains == NO) { if (self.device) { // Update existing device [device setValue:Audit forKey:@"auditnameId"]; [device setValue:String forKey:@"checklistid"]; [device setValue:String2 forKey:@"checkpointid"]; [device setValue:FailString forKey:@"failreason"]; [device setValue:WarningString forKey:@"warningreason"]; [device setValue:AuditStartDate forKey:@"starttimedate"]; [device setValue:userid forKey:@"userid"]; NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } else { // Create a new device NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"AuditPost" inManagedObjectContext:context]; [newDevice setValue:Audit forKey:@"auditnameId"]; [newDevice setValue:String forKey:@"checklistid"]; [newDevice setValue:String2 forKey:@"checkpointid"]; [newDevice setValue:FailString forKey:@"failreason"]; [newDevice setValue:WarningString forKey:@"warningreason"]; [newDevice setValue:AuditStartDate forKey:@"starttimedate"]; [newDevice setValue:userid forKey:@"userid"]; NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } } else { NSError *error = nil; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } /// NSManagedObjectContext *context = [self managedObjectContext]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"AuditPost" inManagedObjectContext:context]]; // NSError *error = nil; NSArray *results = [context executeFetchRequest:request error:&error]; NSManagedObject* favoritsGrabbed = [results objectAtIndex:CurrentIndexPath]; [favoritsGrabbed setValue:String forKey:@"checklistid"]; // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); } } } 

如图片中我select传递button

在这里输入图像说明

但是当我重新加载表selectbutton取消select

在这里输入图像说明

我怎样才能得到选定的价值,当我重新加载表。感谢提前!

在ios表格视图重用每行的单元格,所以它确实发生。 您使用模型类来pipe理select。 我在单元格上的button上添加了select器。还有重载表格视图的例子。 请检查下面的代码。

 // // ViewController.m #import "ViewController.h" #import "DataModel.h" #import "MyTableViewCell.h" @interface ViewController () { NSMutableArray *arrData; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; arrData = [[NSMutableArray alloc]init]; // create 15 model and store in array for (int i =0; i<15; i++) { DataModel *model = [DataModel new]; model.strSelected = @""; [arrData addObject:model]; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return arrData.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { MyTableViewCell *cell = [self.tblView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; // tag add on buttons cell.btnPPressed.tag = indexPath.row; cell.btnFPressed.tag = indexPath.row; cell.btnWPressed.tag = indexPath.row; cell.btnNAPressed.tag = indexPath.row; //method add on buttons [cell.btnPPressed addTarget:self action:@selector(btnP:) forControlEvents:UIControlEventTouchUpInside]; [cell.btnFPressed addTarget:self action:@selector(btnF:) forControlEvents:UIControlEventTouchUpInside]; [cell.btnWPressed addTarget:self action:@selector(btnW:) forControlEvents:UIControlEventTouchUpInside]; [cell.btnNAPressed addTarget:self action:@selector(btnNA:) forControlEvents:UIControlEventTouchUpInside]; //background color change on button DataModel *model = [arrData objectAtIndex:indexPath.row]; if([model.strSelected isEqualToString:@"P"]) { cell.btnPPressed.backgroundColor = [UIColor redColor]; } else if([model.strSelected isEqualToString:@"F"]) { cell.btnFPressed.backgroundColor = [UIColor redColor]; } else if([model.strSelected isEqualToString:@"W"]) { cell.btnWPressed.backgroundColor = [UIColor redColor]; } else if([model.strSelected isEqualToString:@"NA"]) { cell.btnNAPressed.backgroundColor = [UIColor redColor]; } else { cell.btnPPressed.backgroundColor = [UIColor darkGrayColor]; cell.btnFPressed.backgroundColor = [UIColor darkGrayColor]; cell.btnWPressed.backgroundColor = [UIColor darkGrayColor]; cell.btnNAPressed.backgroundColor = [UIColor darkGrayColor]; } return cell; } //buttons methods -(void)btnP:(UIButton *)sender { sender.backgroundColor = [UIColor redColor]; DataModel *model = [arrData objectAtIndex:sender.tag]; model.strSelected = @"P"; //example reload table dispatch_async(dispatch_get_main_queue(), ^{ [self.tblView reloadData]; }); } -(void)btnF:(UIButton *)sender { sender.backgroundColor = [UIColor redColor]; DataModel *model = [arrData objectAtIndex:sender.tag]; model.strSelected = @"F"; //example reload table dispatch_async(dispatch_get_main_queue(), ^{ [self.tblView reloadData]; }); } -(void)btnW:(UIButton *)sender { sender.backgroundColor = [UIColor redColor]; DataModel *model = [arrData objectAtIndex:sender.tag]; model.strSelected = @"W"; //example reload table dispatch_async(dispatch_get_main_queue(), ^{ [self.tblView reloadData]; }); } -(void)btnNA:(UIButton *)sender { sender.backgroundColor = [UIColor redColor]; DataModel *model = [arrData objectAtIndex:sender.tag]; model.strSelected = @"NA"; //example reload table dispatch_async(dispatch_get_main_queue(), ^{ [self.tblView reloadData]; }); } @end // DataModel.h #import <Foundation/Foundation.h> @interface DataModel : NSObject @property(nonatomic, strong)NSString *strSelected; @end // MyTableViewCell.h #import <UIKit/UIKit.h> @interface MyTableViewCell : UITableViewCell @property (strong, nonatomic) IBOutlet UIButton *btnPPressed; @property (strong, nonatomic) IBOutlet UIButton *btnFPressed; @property (strong, nonatomic) IBOutlet UIButton *btnWPressed; @property (strong, nonatomic) IBOutlet UIButton *btnNAPressed; @end 

要很多代码….你应该只发布有关问题的代码。 我的猜测,你只设置视图,没有variables负责这一点。 重新加载表格视图时,您将更新颜色并设置默认颜色。 简单的解决scheme – 创build代表每个细胞的模型。 这个模型知道哪些button被选中

编辑:例子

 class Model { var name: String? var isButtonOneSelected = false var isButtonTwoSelected = false var isButtonThreeSelected = false .... } 

你可以有一个模型或一个可变的字典来表示select你的button。

 NSMutableDictionary *buttonSelection = [@{@"P_Button" : @"Selected", @"F_Button" : @"Selected", @"W_Button" : @"Selected", @"NA_Button" : @"Selected"} mutableCopy]; 

在你的方法cellForRowAtIndexPath里面。 你可以简单地使用这个字典来更新每个单元格:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *STI=@"STI"; AuditTableViewCell *cell = (AuditTableViewCell *)[tableView dequeueReusableHeaderFooterViewWithIdentifier:STI]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AuditTableViewCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; cell.accessoryType=UITableViewCellAccessoryNone; } if ([[buttonSelection objectForKey:@"P_Button"] isEqualToString:@"Selected"]) { [cell.passbtn setSelected:YES]; } return cell; } 

除此之外,最好还是使用自定义单元格的代理模式来获得所需的function。 这可以通过以下方式完成。

 @protocol CustomCellProtocol <NSObject> - (void)passButtonSelected:(BOOL)selected forIndexPath:(NSIndexPath *)indexPath; @end @interface CustomTableViewCell : UITableViewCell @property (nonatomic, weak) id<CustomCellProtocol> cellDelegate; @property (nonatomic) NSIndexPath *indexPath; @end 

@implementation.m文件中,单击button,执行以下操作

 - (void)passButtonSelected { [self.cellDelegate passButtonSelected:YES forIndexPath:self.indexPath]; } 

在你的cellForRowAtIndexPath方法里面,

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *STI=@"STI"; AuditTableViewCell *cell = (AuditTableViewCell *)[tableView dequeueReusableHeaderFooterViewWithIdentifier:STI]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AuditTableViewCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; cell.accessoryType=UITableViewCellAccessoryNone; } cell.indexPath = indexPath; cell.cellDelegate = self; if ([[buttonSelection objectForKey:@"P_Button"] isEqualToString:@"Selected"]) { [cell.passbtn setSelected:YES]; } return cell; } 

所以,当你点击你的单元格上的button。 您将在您的tableview.m文件中获得以下电话。

 - (void)passButtonSelected:(BOOL)selected forIndexPath:(NSIndexPath *)indexPath { NSMutableDictionary *statusDic = [[self.buttonStatusModelArray objectAtIndex:indexPath.row] mutableCopy]; [statusDic setObject:(selected ? @"Selected" : @"NonSelected") forKey:@"P_Button"]; [self.buttonStatusModelArray replaceObjectAtIndex:indexPath.row withObject:statusDic]; } 

如果您在实施过程中遇到任何问题,请告诉我。 随意build议编辑,使这个更好:)