Accessing cell attributes outside of cellForRowAtIndexPath

11,270

Solution 1

you can get UITableViewCell using NSIndexPath.

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:YOUR_ROW inSection:YOUR_SECTION];

UITableViewCell* cell = [yourTable cellForRowAtIndexPath:indexPath];
cell.textLabel.textColor = YOUR_COLOR;
[yourTable reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

Hope it helps you.

Solution 2

Just call [self tableView:self.tableView cellForRowAtIndexPath:indexPath]. It will return the cell at the given index path.

Solution 3

Access Custom Label In UiTableView "didselectRow"

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
UILabel *label = (UILabel*)[cell viewWithTag:101]; // you can get label like
label.backgroundColor=[UIColor redColor];

Get index path from button

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

  CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:FriendsTable];
NSIndexPath *indexPath = [FriendsTable indexPathForRowAtPoint:buttonPosition];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
UILabel *label = (UILabel*)[cell viewWithTag:101]; // you can get label like
label.backgroundColor=[UIColor redColor];

}
Share:
11,270
StuartM
Author by

StuartM

Web Developer/iOS Developer. Current Apps: Where to Next -https://itunes.apple.com/us/app/where-to-next/id884766874?ls=1&mt=8 Shows business data around your current location.

Updated on August 17, 2022

Comments

  • StuartM
    StuartM almost 2 years

    I have five fields setup on a Signup controller. Username, displayname, password, confirm password and email address.

    They are setup with the following:

    static NSString *CellIdentifier = @"Cell";
    
        UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
    
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.textLabel.textColor = [UIColor colorWithRed:14.0f/255.0f green:62.0f/255.0f blue:178.0f/255.0f alpha:0.8f];
        cell.textLabel.font = [UIFont boldSystemFontOfSize:13.0f];
    
    
        switch ( indexPath.row ) {
            case 0: {
                cell.textLabel.text = NSLocalizedString(@"UsernameFieldLabel", @"Username field label");
                [cell addSubview:self.usernameField];
                break ;
            }
            case 1: {
                cell.textLabel.text = NSLocalizedString(@"DisplayNameFieldLabel", @"Displayname field lael");
                [cell addSubview:self.displayNameField];
                break ;
            }
            case 2: {
                cell.textLabel.text = NSLocalizedString(@"PasswordFieldLabel", @"Password field lael");
                [cell addSubview:self.passwordField];
                break ;
            }
            case 3: {
                cell.textLabel.text = NSLocalizedString(@"ConfirmPasswordFieldLabel", @"Confirm Password field lael");
                cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
                cell.textLabel.numberOfLines = 2;
                [cell addSubview:self.confirmPasswordField];
                break ;
            }
            case 4: {
                cell.textLabel.text = NSLocalizedString(@"EmailFieldLabel", @"Email field lael");
                [cell addSubview:self.emailField];
                break ;
            }
        }
    
        return cell;
    

    The cells themselves work fine. I then have some validation on a button which checks for a valid email address etc, this also works fine.

    What I would like to be able to do is update the cell.textLabel.textColor attribute in the validation code. For example, if the email address is not valid I want to update the label text color to Red so that it stands out (I also sort the responder etc).

    How do I get a reference to this specific cell outside of the setup of cells?

    EDIT This is the change following an answer. I need to access the 5th cll (index path 4) in section 1(only one section in table view):

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:4 inSection:1];
    
    UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];
    cell.textLabel.textColor = [UIColor redColor];
    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];