Reputation: 141
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:
Upvotes: 1
Views: 726
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