在pickerview事件中突出显示UITableViewCell

时间:2011-11-28 09:13:07

标签: objective-c ios xcode uitableview

我有一个包含UITableView和UIDatePicker的UI。当我在桌面上选择一行时,它会突出显示,但只要我与DatePicker交互(滚动到一个新值),该行就不再突出显示。该行的值绑定到DatePicker的值。如何永久突出显示细胞?

在iCal-App中 - >添加 - >开始和结束我看到了这种行为。 我在选择器的ValueChanged方法中尝试了selectRowAtIndex方法。我认为在这个回调方法中突然显示了突出显示。

-(IBAction)setStartTimeMethod
{

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];   
    [dateFormat setDateFormat:@"EEE, dd. MMM yyyy  HH:mm"];


    if(!self.endDateRowSelected)
        self.date = [dateFormat stringFromDate:[datePicker date]];
    else
        self.endDate = [dateFormat stringFromDate:[datePicker date]];
    [dateFormat release];
//    [self.tableView1 selectRowAtIndexPath:tableView1.indexPathForSelectedRow animated:NO scrollPosition:UITableViewScrollPositionTop];
    [self.tableView1 reloadData];

}

编辑,我的didSelectRowMethod

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"EEE, dd. MMM yyyy  HH:mm"];

    if(indexPath.row == 0){
        NSLog(@"Start");
        self.endDateRowSelected = NO;


        NSDate *startDate = [formatter dateFromString:self.date];
        [datePicker setDate:startDate animated:YES];

        //if(self.endDateRowSelected)
          //  [tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];

    }else if(indexPath.row == 2){
        NSLog(@"End");
        self.endDateRowSelected = YES;

        if(self.endDate){
            NSDate *endDateTime = [formatter dateFromString:self.endDate];
            [datePicker setDate:endDateTime animated:YES];
        }
    }else{
        self.endDateRowSelected = NO;
    }

    [formatter release];
//    Won't work, doesn't allow highlighting a cell.
//    [tableView deselectRowAtIndexPath:indexPath animated:NO];

}

BR, mybecks

4 个答案:

答案 0 :(得分:0)

在表视图的didSelectRowAtIndexPath委托方法的末尾使用这段代码,

[tableView deselectRowAtIndexPath:indexPath animated:NO];

答案 1 :(得分:0)

尝试:

[self.tableView1 reloadData];
// and then
[self.tableView1 selectRowAtIndexPath:tableView1.indexPathForSelectedRow animated:NO scrollPosition:UITableViewScrollPositionTop];

我想更好的方法是使用表中每个自定义单元格的IBOutlets。如果您正在编辑该单元格的日期,那么为什么要重新加载整个表格呢?如果您的单元格数量较少,您可以继续创建自定义UITableViewCell,添加标签并仅更新UIDatePicker委托回调中的那些标签。

答案 2 :(得分:0)

在didSelectRowAtIndexPath

中使用以下代码
cell.selectionStyle=UITableViewCellSelectionStyleBlue;

答案 3 :(得分:0)

解决方案非常简单。

在我的cellForRowAtIndexPath中,我必须调用selectRowAtIndexPath方法。

...
if(indexPath.row == 0){
                cell.description.text = [dict objectAtIndex:indexPath.row];
                cell.dateTime.text = self.startDate;

                if(!endDateRowSelected)
                    [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
            }else if(indexPath.row == 2){
                cell.description.text = [dict objectAtIndex:indexPath.row];
                cell.dateTime.text = self.endDate;
                if(endDateRowSelected)
                    [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
            }
...

bool设置在我的didSelectRowAtIndexPath中,具体取决于单击“开始”或“结束”。 我仍然在我的pickerValueChanged委托中重新加载表。

感谢您抽出时间&帮助