2013-09-30 3 views
1

Итак, я добавил UITableViewController и UITableViewCell в UIViewController и в то время как метод cellForRowAtIndexPath делегата работает, didSelectRowAtIndexPath не делает. У кого-нибудь есть идеи?didSelectRowAtIndexPath не вызывает в ViewController

  • EDIT 2: Делегат для UITableView устанавливается в UIViewController.

  • РЕДАКТИРОВАТЬ 3: Я нашел ответ на свой вопрос по другому вопросу о стеке here. В основном у меня был UITap... на моем [self view], который блокировал didSelectRow.... Я понятия не имею, почему нажатие блокирует метод делегата, и я также не знаю, как заставить одновременно крана и таблицу работать вместе.

  • EDIT: Часть, которая меня беспокоит, заключается в том, что я установил эту точную настройку для более раннего приложения. Значит, я пропустил шаг где-то по пути. Дело в том, что я расчесывал все этапы и сравнивал предыдущее приложение с текущим приложением, и я действительно не знаю, что я пропустил.

Я добавил регистрацию как для методов делегирования, так и в то время как один выводит, другой - нет.

ViewController.h

#import "...TableViewCell.h" 
... 
    UITableViewDataSource, 
    UITableViewDelegate 
... 

ViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"cellForRowAtIndexPath"); 
    ... 
    return Cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"didSelectRowAtIndexPath"); 
} 

... TableViewCell.h (содержание не важно)

... TableViewCell.m (содержание не важно)

+1

Поскольку метод «cellForRow ...» называется, мы знаем, что «dataSource» таблицы задан. Вы также установили свойство 'delegate' таблицы? Не устанавливая, что метод 'didSelectRow ...' не будет вызываться. – rmaddy

+0

Привет rmaddy, да, свойство делегата 'UITableView' установлено в' UIViewController'. * Редактировать: я случайно сказал 'UITableViewController', но я хотел сказать' UIViewController'. – yhl

+1

Внимательно проверьте, правильно ли вы его произвели, с надлежащей капитализацией. –

ответ

2

Я нашел ответ на another StackOverflow question.

У меня был UITapGestureRecognizer, добавленный в [self view], который я прокомментировал, а затем обработан делегат.

Может кто-нибудь скажет мне, почему это сработало, а также как я могу получить UITapGestureRecognizer, работающий на том же экране, что и UITableView?

// Hide keyboard when user taps outside of it 
UITapGestureRecognizer *tapGestureRecognizer = 
    [[UITapGestureRecognizer alloc] initWithTarget:self 
              action:@selector(hideKeyboardOnTap)]; 
//[[self view] addGestureRecognizer:tapGestureRecognizer]; 
  • EDIT: Исправлена ​​опечатка UITapeGestureRecognizer к UITapGestureRecognizer
+0

Я думаю, что это «UITapGestureRecognizer». (И это немного загадочно. Лучше всего, если это возможно, это добавить распознаватель в подзаголовок, который не тот, где вы хотите подхватить штрихи другими способами.) –

1

у вас установлен делегат tableView?

myTableView.delegate = self;

EDIT: Мое плохое, не читал эту ячейку для строки вызывается.

Вы говорите, что использовали обычай tableViewController. Если вы переопределили метод didSelectRowAtIndexPath, может быть важно позвонить [super didSelectRowAtIndexPath:] в tableViewController

EDIT 2: Еще одна вещь. Я не знаю причину этого, но я столкнулся с той же проблемой некоторое время назад в viewController. Я разрешил это, добавив пустую реализацию didDeselectRowAtIndexPath в том же viewController. Попробуйте добавить его в контроллер delegate вашего стола.

+1

Не твой плохой. Один из «dataSource», а другой - «делегат». – rmaddy

0

Чтобы ответить на вопрос "как я могу получить UITapGestureRecognizer работает на том же экране, как UITableView";

Вы должны "сообщить" ваш GestureRecognizer, что другой распознаватель может обрабатывать один и тот же жест:

Вы сделать это путем реализации метода UIGestureRecognizerDelegate

- (BOOL) gestureRecognizer: (UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer

Это небольшой Exemple ...

@interface MyController : UIViewController<UIGestureRecognizerDelegate> 
{ 
} 
@end 


-(void)viewDidLoad 
{ 
    UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionOnTapGesture:)]; 
    [gr setNumberOfTapsRequired:1]; 
    [gr setDelegate:self]; 
    [self.view addGestureRecognizer:gr];  
} 

-(BOOL) gestureRecognizer:(UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyGestureRecognizer:(UIGestureRecognizer *) otherGestureRecognizer 
{ 
    return YES; 
} 
Смежные вопросы