UITableView和UIPickerView交互问题

时间:2011-10-07 01:40:10

标签: iphone uitableview ios4 uipickerview

我有一个由三行组成的UITableView - 每行都是设置屏幕中的数据字段。当用户点击一行时,我会看到UIPickerView,以便他们选择一个值。我使用UITableViewCellStyleValue1 - 左侧是数据字段的名称,右侧(detailTextLabel)应该是从选择器中选择的值。

我创建了一个targetCell ivar来保存选定的单元格。在我的选择器中,我使用didSelectRow方法中的以下代码:

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

哪个有效,但我有几个表达问题。第一个是detailTextLabel文本是白色的(虽然API说它应该是蓝色??!?)我修复了这个:

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

但是,在单击单元格或其他单元格之前,文本不会出现在单元格中。所以我尝试添加一个     [self.tableView reloadData]; 这样可以刷新单元格并显示标签文本,但也会删除我想要维护的蓝色突出显示。

如果您可以查看此代码并让我知道在选择器上选择值时获取以下结果的最简单方法:

  • cell 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];
} 

编辑添加最终代码解决方案:

感谢chown的答案 - 我的最终工作代码是:

- (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 个答案:

答案 0 :(得分:1)

试试这个:

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