我有一个包含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
答案 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委托中重新加载表。
感谢您抽出时间&帮助