Проблемы взаимодействия UITableView и UIPickerView - PullRequest
1 голос
/ 07 октября 2011

У меня есть UITableView, состоящий из трех строк - каждая строка является полем данных на экране настроек. Когда пользователь щелкает строку, у меня появляется UIPickerView для выбора значения. Я использую UITableViewCellStyleValue1 - левая сторона - это имя поля данных, а правая сторона (detailTextLabel) должна быть значением, выбранным из средства выбора.

Я создал целевую ячейку для хранения выбранной ячейки. В моем средстве выбора я использую приведенный ниже код в методе didSelectRow:

    self.targetCell.detailTextLabel.text = @"TEST";

Что работает, однако у меня есть несколько проблем с презентацией. Первым было то, что текст detailTextLabel был белым (хотя API говорит, что он должен быть синим ??!?) Я исправил это с помощью:

    self.targetCell.detailTextLabel.textColor = [UIColor blackColor];

Однако текст не отображается в ячейке, пока я не щелкну ячейку или другую ячейку. Поэтому я попытался добавить [self.tableView reloadData]; Что позволяет обновить ячейку и получить текст метки, но также убирает выделение синего цвета, которое я хочу сохранить.

Если вы можете просмотреть этот код и сообщить мне самый простой способ получить приведенные ниже результаты при выборе значения в средстве выбора:

  • ячейка detailTextLabel.text немедленно обновляется до выбранного значение в черном цвете
  • синяя подсветка активной ячейки сохраняется

Спасибо!

- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component { 
    // Handle the selection 
    self.targetCell.detailTextLabel.textColor = [UIColor blackColor];
    self.targetCell.detailTextLabel.text = @"TEST";
    [self.tableView reloadData];
} 

Отредактировано для добавления окончательного кода soluton:

Спасибо Чоуну за ответ - мой последний рабочий код:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component { 
    // Handle the selection 
    self.targetCell.detailTextLabel.textColor = [UIColor blackColor];
    self.targetCell.detailTextLabel.text = @"TEST";
    NSIndexPath *path = [self.tableView indexPathForSelectedRow];
    [self.tableView reloadData];
    [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:path.row inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone];
} 

1 Ответ

1 голос
/ 07 октября 2011

Попробуйте это:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component { 
    // Handle the selection 
    self.targetCell.detailTextLabel.textColor = [UIColor blackColor];
    self.targetCell.detailTextLabel.text = @"TEST";
    [self.tableView reloadData];
    NSIndexPath *ip = [tableView indexPathForSelectedRow];

    // assuming self is the tableViews delegate.  Optional
    [self tableView:tableView willSelectRowAtIndexPath:ip];

    [tableView selectRowAtIndexPath:ip animated:YES scrollPosition:UITableScrollPositionTop];

    // assuming self is the tableViews delegate.  Optional
    [self tableView:tableView didSelectRowAtIndexPath:ip];
} 
...