2011-11-28 78 views
1

我有一個包含UITableView和UIDatePicker的用戶界面。當我在我的表上選擇一個行時,它會突出顯示,但只要我與DatePicker交互(滾動到一個新值),該行就不會再突出顯示。該行的值綁定到DatePicker的值。我怎樣才能永久突出顯示單元格?突出顯示UITableViewCell而pickerview事件

在iCal-應用程序 - >添加 - >開始&最後我看到了這種行爲。 我在picker的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

的解決方案是很容易的。

在我的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]; 
      } 
... 

的布爾設在我didSelectRowAtIndexPath,根據點擊開始或結束。 我仍然在我的pickerValueChanged委託中重新加載表格。

謝謝你的時間&幫助。

0

使用這段代碼表視圖的didSelectRowAtIndexPath方法委託方法結束,

[tableView deselectRowAtIndexPath:indexPath animated:NO]; 
+0

感謝您的回答,但這不允許突出顯示一行。我想要反對的部分 - 突出顯示一個單元格,直到我點擊另一個單元格。 – mybecks

0

嘗試:

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

我想這樣做的更好方法是使用IBOutlets爲表中的每個自定義單元格。如果您正在編輯該單元格的日期,那麼爲什麼要重新加載整個表格?如果您的單元格數量較少,則可以繼續並創建自定義UITableViewCell,添加標籤並僅更新UIDatePicker委託回調中的標籤。

0

使用下面的代碼在didSelectRowAtIndexPath方法

cell.selectionStyle=UITableViewCellSelectionStyleBlue;