Ячейки таблицы не выделяются сразу при прикосновении - PullRequest
0 голосов
/ 11 июля 2009

В моем приложении у меня есть табличное представление, содержащее около восьми ячеек. Наверху есть панель навигации. Когда пользователь касается ячейки, в течение 1/2 секунды ничего не происходит. Затем ячейка, к которой вы прикоснулись, подсвечивается синим, и новый вид сразу же перемещается в положение.

Проблема в том, что пользователь не получает обратной связи о том, к какой ячейке он прикоснулся, до , только до того, как новый вид переместится в положение.

Например, когда я изучаю таблицы в приложении «Настройки iPhone», при прикосновении к ячейке ячейка немедленно становится синей, а затем происходит задержка на 1/2 секунды, и затем вы видите новый взгляд.

Как получить обратную связь от моей таблицы о выделении ячеек сразу? Я использую tableView didSelectRowAtIndexPath:, и каждая ячейка имеет дополнительную кнопку.

Спасибо за понимание.

Ответы [ 4 ]

1 голос
/ 11 июля 2009

Вы используете нарисованную пользователем ячейку (с переопределением drawRect) или что-то в этом роде?

если у вас есть собственный метод drawRect, вам нужно сделать что-то вроде этого (основываясь на коде для tweetie, найден здесь ):


//default colors for cell
UIColor *backgroundColor = [UIColor whiteColor];
UIColor *textColor = [UIColor blackColor];

//on highlight, swap colors
if(self.highlighted){
    backgroundColor = [UIColor clearColor];
    textColor = [UIColor whiteColor];
}

это должно дать вам поведение по умолчанию.

0 голосов
/ 17 мая 2010

Вы можете поместить эти 2 строки кода в начало метода didSelectRowAtIndexPath:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:YES animated:YES];

сначала следует выделить ячейку перед обработкой другой логики программы.

0 голосов
/ 16 июля 2009

несколько вещей:

вероятно, лучше иметь свойство в beforeViewController, чтобы оно могло устанавливать собственный заголовок при загрузке (вместо того, чтобы устанавливать его из родительского класса).

секунда, почему вы устанавливаете кнопку возврата для текущего класса? вы также это делаете (вы выделяете UIBarButtonItem, но не освобождаете его).


NewViewController *newViewController = [[[NewViewController alloc]
initWithNibName:@"New" bundle:nil] autorelease];
newViewController.name = [self.listData objectAtIndex:indexPath.row];
[self.navigationController pushViewController:beforeAfterViewController animated:YES]; 

тогда в NewViewController у вас есть


- (void) viewDidLoad{
    self.title = self.name;
}


re: ваш дополнительный вопрос: если вы выталкиваете дочерний контроллер с помощью [self.navigationController popViewControllerAnimated: YES], родительское представление должно автоматически отменить выбор строки, которая была ранее выбрана. он не должен оставаться выбранным, если вы не заставляете его оставаться таким.

вам не нужно делать ничего подобного [self.tableView deselectRowAtIndexPath:], если только вы не выдвигаете дочерние представления (и не делаете что-то вроде пометки ячейки, которую нажал пользователь).

0 голосов
/ 11 июля 2009

Похоже, что экран обновляется после обработки нового слайда. Вам необходимо обновить экран перед рендерингом нового вида слайдов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...