2013-04-25 2 views
5

У меня есть пять полей, установленных на контроллере регистрации. Имя пользователя, отображаемое имя, пароль, подтверждение пароля и адрес электронной почты.Доступ к атрибутам ячеек вне cellForRowAtIndexPath

Они настроены следующим:

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; 

Клетки сами работают отлично. Затем я получаю некоторую проверку на кнопке, которая проверяет действительный адрес электронной почты и т. Д., Это также отлично работает.

Что бы я хотел сделать, это обновить атрибут cell.textLabel.textColor в коде проверки. Например, если адрес электронной почты недействителен, я хочу обновить цвет текста ярлыка до красного, чтобы он выделялся (я также сортирую ответчик и т. Д.).

Как получить ссылку на эту конкретную ячейку вне установки ячеек?

EDIT Это изменение после ответа. Мне нужно, чтобы получить доступ к 5-ХЛЛ (индекс пути 4) в разделе 1 (только один раздел в виде таблицы):

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]; 
+0

Изменить NSIndexPath * indexPath = [NSIndexPath indexPathForRow: 4 inSection: 1]; как NSIndexPath * indexPath = [NSIndexPath indexPathForRow: 4 inSection: 0]; –

ответ

8

вы можете получить UITableViewCell, используя 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]; 

Надеюсь, это поможет вам.

+0

Я получаю ошибку SIGBRT в последней строке: «NSInternalInconsistencyException», причина: «попытаться удалить строку 4 из раздела 1, но перед обновлением есть только 1 раздел» – StuartM

+0

Я обновил вопрос с помощью кода, который я использовал для вашего ответьте, но создайте эту ошибку, которая не имеет смысла. – StuartM

+0

Сколько секций в вашей таблице? и если есть только одна секция, тогда передайте раздел как 0, а не 1. –

0

Просто позвоните [self tableView:self.tableView cellForRowAtIndexPath:indexPath]. Он вернет ячейку по указанному пути указателя.

0

Доступ на заказ Ярлык В UITableView "didselectRow"

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

Получить индекс путь от кнопки

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

} 
0

Вы можете создать с помощью тегов.

в cellForRowAtIndexPath

static NSString *cellId = @"Cell"; 
CustomCell *cell = (CustomCell *)[self.tblView dequeueReusableCellWithIdentifier:cellId]; 
if (cell == nil) { 
    NSArray * myNib; 
    myNib =[[NSBundle mainBundle]loadNibNamed:@"CustomCell" owner:self options:nil]; 
    cell = (CustomCell *)[myNib lastObject]; 
} 
[cell.deleteBtn addTarget:self action:@selector(cellDeleteAction:) forControlEvents:UIControlEventTouchUpInside]; 
cell.deleteBtn.tag = indexPath.row; 
[cell.editBtn addTarget:self action:@selector(cellEditAction:) forControlEvents:UIControlEventTouchUpInside]; 
cell.editBtn.tag = indexPath.row; 

после этого вы можете создать кнопку метод действий, как это,

- (void) cellEditAction:(UIButton *)sender { 
UIButton *button = (UIButton *)sender; 
NSString *rateId = [[resDict valueForKey:@"value"]objectAtIndex:button.tag]; 
} 
0

Обновлено Swift,

let cell = tableView.cellForRow(at: indexPath) as! <Insert tableviewcell Controller here> 

Тогда вы можете получить доступ ко всем объектам внутри вашей так же, как если вы находитесь в cellforrowat

let displayname = cell.labelfordisplayname.text! 
print("This is the displayname -> \(displayname)")