sarosar
sarosar

Reputation: 141

Table Cell Button action to change the label background color

I need to change label background color in the tableview's cell by using touchup inside the button action. I created the custom cell in a table view then I added the 20 rows into the cell (using NSMutableArray) and then I created the UIButton and I implement the button action programmatically (TouchUPInside action).

My condition is "When I clicking the button the label background color is changed to the green color in that particular index label (particular row). But in my code it reflecting the action in all rows. It label color has to changed in all rows."

Here is My code:

//Array Declaration
    kioskStatus = [NSMutableArray arrayWithObjects:@"Open",@"Closed",@"Open",@"Closed",@"Open",@"Closed",@"Closed",@"Open",@"Open",@"Closed",@"Open",@"Closed",@"Open",@"Closed",@"Open",@"Closed",@"Open",@"Closed",@"Closed",@"Open", nil];

 //Table Cell Delegates
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *simpleTableIdentifier = @"Cell";

CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];  // Custom cell identifier for the string
if (cell == nil) // Check the cell values are nill or not
{
    cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; // Initialize the customTableviewCell identifer to the cell.
}


cell.kioskStat.text = [kioskStatus objectAtIndex:indexPath.row];


cell.detailsButton.tag=indexPath.row;

**if(cell.detailsButton.selected==YES)
{
    cell.kioskStat.textColor=[UIColor greenColor];  //if button is selected the label color to change green
}
else
{
    cell.kioskStat.textColor=[UIColor blackColor];    //else the label color to change black
}**

//Button Action
[cell.detailsButton addTarget:self action:@selector(detailsButtonAction:) forControlEvents: UIControlEventTouchUpInside];

return cell;   // returns the cell values to the table view.
}


 -(void)detailsButtonAction:(UIButton*)sender

  {
  [kioskStatus objectAtIndex:sender.tag]

  NSLog(@"button tapped Index %lu",sender.tag);

return [self.tableView reloadData]; //Reload the table view.
 }

This my code. I think the button action was makes some wrong but i don't know exactly. so, any one can help me on this my functionality.

This is the Error Given Screen Shot:

enter image description here

Upvotes: 1

Views: 726

Answers (1)

MD.
MD.

Reputation: 1167

if i got your question properly you want to toogle the state of UIButton and manage the background color of UILabel accordingly.

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.



    kioskStatus = [NSMutableArray arrayWithObjects:@"Open",@"Closed",@"Open",@"Closed",@"Open",@"Closed",@"Closed",@"Open",@"Open",@"Closed",@"Open",@"Closed",@"Open",@"Closed",@"Open",@"Closed",@"Open",@"Closed",@"Closed",@"Open", nil];

    //arrButtonState holds the data of selection state of button for particular cell
    //Both array kioskStatus & arrButtonState count will be same all time
    arrButtonState =[[NSMutableArray alloc]init];

    //initially All objects in arrBusttonState Will Be "false"
    for (int i = 0; i < kioskStatus.count; i++)
    {
        [arrButtonState addObject:@"False"];

    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *simpleTableIdentifier = @"Cell";

    CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];  // Custom cell identifier for the string
    if (cell == nil) // Check the cell values are nill or not
    {
        cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; // Initialize the customTableviewCell identifer to the cell.
    }

    //Setting Text
    cell.kioskStat.text = [kioskStatus objectAtIndex:indexPath.row];

    //Setting Tag to button
    cell.detailsButton.tag=indexPath.row;

    //if previous or default state of button of this particlular cell is false
    if ([[arrButtonState objectAtIndex:indexPath.row] isEqualToString:@"False"]) {
        [cell.detailsButton setSelected:FALSE];

    }
    else
    {
        [cell.detailsButton setSelected:TRUE];
    }


    if(cell.detailsButton.selected==YES)
    {
        cell.kioskStat.textColor=[UIColor greenColor];  //if button is selected the label color to change green
    }
    else
    {
        cell.kioskStat.textColor=[UIColor blackColor];    //else the label color to change black
    }

    //Button Action
    [cell.detailsButton addTarget:self action:@selector(detailsButtonAction:) forControlEvents: UIControlEventTouchUpInside];

    return cell;   // returns the cell values to the table view.
}


-(void)detailsButtonAction:(UIButton*)sender
{

    //Check that button state is selected or not
    if (sender.selected)
    {
        //if button is already selected turn it to false state
        [arrButtonState replaceObjectAtIndex:sender.tag withObject:@"False"];

    }
    else
    {
        //if button not selected then turn it to selected state
        [arrButtonState replaceObjectAtIndex:sender.tag withObject:@"True"];

    }

    return [self.tableView reloadData]; //Reload the table view.
}

Upvotes: 1

Related Questions