метод делегата tableview никогда не вызывается - PullRequest
0 голосов
/ 17 октября 2011

У меня есть viewcontroller, и я реализую делегат UITableViewDelegate и UITableViewDataSource, поэтому у меня есть следующий метод:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return [_nameArray count];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 50;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return @"name";
}
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
   static NSString *TableIdentifier = @"TableIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TableIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableIdentifier]autorelease];
    }
    UILabel *nameLabel = [[UILabel alloc] init];
    nameLabel.textAlignment = UITextAlignmentLeft;    
    nameLabel.text = @"100";
    nameLabel.backgroundColor = [UIColor blackColor];
    nameLabel.textColor = [UIColor yellowColor];
    [cell.contentView addSubview:nameLabel];
    [nameLabel release];
    return cell;
}

Я установил точку останова для каждого метода, я могу найти

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

и

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

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

обновление:

Я подключил datasoucre и делегировал владельцу файла в IB, но не могу решить проблему.

Ответы [ 6 ]

12 голосов
/ 17 октября 2011

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

В коде используйте эти две строки

self.tableView.delegate = self;
self.tableView.dataSource = self;
5 голосов
/ 17 октября 2011

_nameArray имеет 0 объектов, поэтому он не приходит cellForRowAtIndexPath, потому что, если _nameArray равен nil или 0 объектов, делегированный метод numberOfRowsInSection возвращает 0, и он не приходит в обоих из вышеупомянутых методов.

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

3 голосов
/ 17 октября 2011

Убедитесь, что вы подключили табличное представление к его делегату либо в коде, либо через выход Interface Builder.

2 голосов
/ 20 декабря 2014

Я столкнулся с подобной проблемой. источник данных работал, а делегат - нет. Если вы добавили «UITapGestureRecognizer» в «self.view», это создает проблему здесь. в этом случае табличный делегат, связанный с взаимодействием с пользователем, не будет вызван. потому что делегаты, такие как didSelect, вызывают, когда происходит любое взаимодействие с пользователем. в этом случае, если в представлении есть UITapGestureRecognizer, делегат таблицы не будет работать.

0 голосов
/ 12 марта 2014

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

0 голосов
/ 17 октября 2011

Вы установили делегат tableView для своего класса?

Кроме того, если вы не создаете подкласс UITableViewController, вы также должны реализовать

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...