Reputation: 1022
I want to change the color of a UITableView cell. I have this code but it doesn't work. Can someone explain to me why and what I should change?
[_myTableView cellForRowAtIndexPath : [NSIndexPath indexPathForItem:myIndexAsInt inSection:0]].contentView.backgroundColor = [UIColor greenColor];
Upvotes: 0
Views: 1861
Reputation: 11
You can have an variable to hold the index position. So after your didSelectRowAtIndexPath delegate called just set the index position in that variable and reload the table. Use a condition in cellForRowAtIndexPath datasource method to check for index position and now set the background colour for that specific cell.
in .h file:
NSInteger indexPos;
in didSelectRowAtIndexPath delegate:
indexPos = indexPath.row;
in cellForRowAtIndexPath:
if (indexPath.row == indexPos) {
cell.backgroundColor = [UIColor colorWithRed:255/255.0f green:255/255.0f blue:255/255.0f alpha:1.0f];
} else {
cell.backgroundColor = [UIColor colorWithRed:0/255.0f green:0/255.0f blue:0/255.0f alpha:1.0f];
}
Upvotes: 0
Reputation: 7466
The line of code itself is ok syntacticaly.
Some things cannot be verified from my side. Please put a breakpoint on that line and run it.
0) By putting a breakpoint there, and seeing the system stop there, you actually check that that line is executed.
1) If step 0 was ok, check that you actually have an instance of table view (it must NOT be nil, maybe if you are using nibs, you forgot to create an IBoutlet).
2) Make sure the tableView has proper delegate and datasource. (usually the ViewController where those things you mention are handled...)
3) check that you are passing a proper type and proper value for the myIndexAsInt argument. It should be of NSInteger type and should be equal 2.
4) If all 3 above are ok, perhaps you are calling it from a wrong place.
Let us know how it went.
Upvotes: 0
Reputation: 392
to set the 3rd cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if (indexPath.row == 2)
{
cell.contentView.backgroundColor = [UIColor redColor];
}
return cell;
}
Upvotes: 0
Reputation: 3598
To change the color of a standard UITableViewCell
you need to do that by overriding the UITableViewDelegate
method tableView:willDispayCell:forRowAtIndexPath:
like so:
- (void)tableView:(UITableView *)tableView willDispayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.contentView.backgroundColor = color;
}
If your cell has custom content you might want to have a slightly different implementation.
Upvotes: 1