简体   繁体   中英

Why Selected value get deselect when I reload table view in objective c

I am new in iOS and I am facing problem in custom table view. I am using custom table view cell

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

}

As in the Image I select Pass button

在此处输入图片说明

But when I reload the table selected button get unselect

在此处输入图片说明

how can I get the selected value when I reload the table.Thanks in Advance!

To much code.... You should post only code related to the problem. My guess, you set the view only and don't have variable responsible for this. When you reload table view you update the color and setup the default color. Simple solution - create Model that represents each cell. This model knows which buttons are selected etc.

edited: Example

class Model {

    var name: String?
    var isButtonOneSelected = false
    var isButtonTwoSelected = false
    var isButtonThreeSelected = false
    ....

}

In ios table view reuse the cell for every row so it does happen. You use model class for manage selection . I have add selectors on button on cell .And also example of reload table view. Please check below code.

//
//  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

You can either have a model or a mutable dictionary to represent selection of your buttons.

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

Inside your method cellForRowAtIndexPath . You can simply use this dictionary for each cell to update:

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

Apart from this, it's better to have use delegate pattern for your custom cell to get the functionality you want. It can be done in the following way.

@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

In your @implementation or .m file of CustomCell, on click of button, do the following

- (void)passButtonSelected {

    [self.cellDelegate passButtonSelected:YES forIndexPath:self.indexPath];
}

Inside you cellForRowAtIndexPath method,

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

So, when you click button on your cell. You will get the following call in your tableview.m file.

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

If you have any problems in implementing this, please let me know. Feel free to suggest edits to make this better :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM