Выделите UITableViewCell во время события средства выбора - PullRequest
1 голос
/ 28 ноября 2011

У меня есть пользовательский интерфейс, который содержит UITableView и UIDatePicker. Когда я выбираю строку в моей таблице, она подсвечивается, но как только я взаимодействую с DatePicker (прокручиваем до нового значения), строка больше не подсвечивается. Значение строки привязано к значению DatePicker. Как я могу постоянно выделять ячейку?

В iCal-App -> Add -> Start & End я видел это поведение. Я попробовал метод selectRowAtIndex в моем методе ValueChanged средства выбора. Я думал, что подсветка теряется в этом callback-методе.

-(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 голосов
/ 29 ноября 2011

Решение было довольно простым.

В моем 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, в зависимости от нажатия на Start или End. Я все еще перезагружаю таблицу в моем делегате pickerValueChanged.

Спасибо за время и помощь.

0 голосов
/ 28 ноября 2011

Попробуйте:

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

Полагаю, гораздо лучший способ сделать это - использовать IBOutlets для каждой пользовательской ячейки в вашей таблице. Если вы редактируете дату для этой ячейки, зачем перезагружать всю таблицу? Если у вас меньше ячеек, вы можете создать собственный UITableViewCell, добавить метки и обновить только те метки из ваших обратных вызовов делегата UIDatePicker.

0 голосов
/ 28 ноября 2011

Используйте следующий код в didSelectRowAtIndexPath

cell.selectionStyle=UITableViewCellSelectionStyleBlue;
0 голосов
/ 28 ноября 2011

Используйте этот фрагмент кода в конце метода делегата didSelectRowAtIndexPath табличного представления,

[tableView deselectRowAtIndexPath:indexPath animated:NO];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...