Предоставление UITextField в пользовательском UITableViewCell правильного цвета текста при выделении / выделении ячейки - PullRequest
3 голосов
/ 01 февраля 2012

У меня есть пользовательский UITableViewCell стиль UITableViewCellSelectionStyleBlue. В нем есть UITextField.

Всякий раз, когда ячейка подсвечивается / выделяется (то есть имеет синий фон), я хочу, чтобы UITextField имел белый цвет, как это делают встроенные метки автоматически.

Это включает, конечно, проверку правильности цвета текстового поля во время анимации затухания «от белого к синему» или «от синего к белому» цвета фона.

Как мне правильно сделать это?

Ответы [ 4 ]

2 голосов
/ 03 февраля 2012

Поскольку ячейка 'custom', я предполагаю, что вы создали подкласс.

Во-первых, UITableViewCellSelectionStyleBlue не является UITableViewCellStyle, это стиль выбора, поэтому его не следует использовать в методе -init, но его значение может совпадать с UITableViewCellStyle.

Кроме того, чтобы отредактировать ячейку при выделении, необходимо переопределить метод -setSelected:animated:.Более того, вам нужно установить для переменной textField textColor ячейки белый цвет при выделении и наоборот - синий.

- (void) setSelected:(BOOL) selected animated:(BOOL) animated {

    self.textField.textColor = (selected == YES ? [UIColor whiteColor] : [UIColor blueColor]);

    [super setSelected:selected animated:animated];        

}

В противном случае лучше всего вызывать метод в методе -tableView:didSelectRowAtIndexPath:.

- (void) tableView:(UITableView *) _tableView didSelectRowAtIndexPath:(NSIndexPath *) _indexPath {

    [self rowSelected:_indexPath];

}

- (void) rowSelected:(NSIndexPath *) indexPath {

    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    BOOL isSelected = cell.isSelected;
    [(UITextField *) [cell viewWithTag:kTextFieldTag] setTextColor:(isSelected == YES ? [UIColor whiteColor] : [UIColor blueColor])];


}
2 голосов
/ 02 февраля 2012

Я думаю, что лучшим способом было бы создать подкласс ячейки табличного представления и переопределить setSelected:animated:

в этом методе вы измените цвет текста поля на желаемый, в зависимости от выбранного флага

для анимации вы просто поместите внутри блока анимации:

[UIView animateWithDuration:.3f animations:^{
    field.textColor = [UIColor whiteColor];
}];
1 голос
/ 09 февраля 2012

Если вы разработали свою пользовательскую ячейку в Интерфейсном Разработчике, тогда UITextField имеет свойство «Выделенное» в Инспекторе Атрибутов, которое по умолчанию имеет черный цвет. Установите его на белый, и цвет текста изменится при касании.

0 голосов
/ 10 февраля 2012
//In your .h file

NSIndexPath * selectedIP;

// in.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell1";

    UITableViewCell *cell =(UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];  


    if (nil ==cell) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

     if (indexPath == selectedIP) {
        textField.textColor = [UIColor whiteColor];
    } else{
        textField.textColor = [UIColor blackColor];
    }
    [self configureCell:cell atIndexPath:indexPath];

    return cell;
}


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSIndexPath *temp = selectedIP;
    selectedIP = nil;
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:temp] withRowAnimation:UITableViewRowAnimationNone];
    selectedIP = indexPath;

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:selectedIP] withRowAnimation:UITableViewRowAnimationNone];


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...