2015-02-18 2 views
1

У меня есть контроллер представления таблицы, в которой клетки не обнаруживаются: я добавил UiViewDataSource и UITableViewDelegate, как показано ниже:cellForRowAtIndexPath не получает называется

myViewController:UITableViewController<UITableViewDataSource,UITableViewDelegate> 

В раскадровке, а также в код, который я поставил

self.tableView.delegate =self; 
self.tableview.datasource = self; 

Мой numberOfRowsInSection возвращает значение 30 (проверено с бревнами) и numberOfSectionsInTableView возвращает 1 (проверено с бревнами)

Я также напечатал Tableview верхнего и нижнего колонтитула вид рамы, высоту и ширину, и все они имеют значение 0,0000

NSLog(@"The header frame size is%f" ,self.tableView.tableHeaderView.frame.size.height); 
NSLog(@"The header frame size is%f" ,self.tableView.tableHeaderView.frame.size.width); 
NSLog(@"The header frame size is%f" ,self.tableView.tableFooterView.frame.size.height); 
NSLog(@"The header frame size is%f" ,self.tableView.tableFooterView.frame.size.width); 

Это firstController навигационного контроллера. Вызывается метод numberOfSectionsInTableView, затем вызывается numberOfRowsInSection, а затем вызывается heightForRowAtIndexPath.

Метод cellForRowAtIndexPath содержит:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    CustomCell *cell = (CustomCell *) [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    [cell configureCustomCell:[self.dataSource objectAtIndex:indexPath.row]]; 

    return cell; 
} 

configureCustomCell настраивает различные свойства в клетке.

Я пробовал все решения, заданные в похожих вопросах, но ни один из них, похоже, не работает. Что мне не хватает?

+0

Откуда вы знаете, что 'cellForRowAtIndexPath' не вызывается после' numberOfRowsInSection'? –

+0

Можете ли вы напечатать размер вашего табличного вида, как вы это делали с заголовком и нижним колонтитулом? Значения также все 0? – AdamPro13

+0

Я поставил точку останова на всех методах, код никогда не достигает точки останова в cellForRowAtIndexPath. –

ответ

0

если вы настроили UITableViewDataSource и UITableViewDelegate протоколов внутри файла ViewController.h, то нет необходимости использовать self.tableView.delegate =self;

self.tableview.datasource = self; 

если вы настроили UITableView внутри раскадровки. , вам необходимо настроить CustomTableViewCell на ваше имущество tableView's.

enter image description here Шаг - 1 выберите таблицуView Cell и внутренний инспектор идентификации, определите свой класс CustomTableViewCell.

enter image description here

шаг - 2 теперь обеспечивают идентификатор соты. (Я использовал "customCell")

enter image description here

импортировать класс CustomCell внутри файла ViewController.m. Просто созданное демо-приложение в соответствии с вашей ссылкой. Надеюсь, он решает ваш запрос.

#import "ViewController.h" 
#import "CustomTableViewCell.h" //CustomTableViewCell class 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
     [super viewDidLoad]; 
     // Do any additional setup after loading the view, typically from a nib. 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 30; //used staticCells 30 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"customCell"; //as defined in cell identifier (as per step -2) 

    CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; 
    if (cell == nil) 
    { 
     cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 
    // configure your custom cell 

    return cell; 

} 
- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 
+0

Конечно, нужно использовать 'self.tableView.delegate = self; self.tableView.dataSource = self; '. TableView не способен к телепатии. Если вы не зададите 'delegate' и' dataSource' каким-то образом (через Storyboard или через код), он никогда не узнает. Я только что проверил его в пустом проекте, если я пропустил некоторые новые функции. Это не работает, если вы не устанавливаете их явно. – FreeNickname

+0

Да, вы правильно программируете конфигурацию UITableView требует self.tableView.delegate = self; self.tableView.dataSource = self; , но если мы используем раскадровку и настроенный UITableView, тогда нет необходимости. Я делаю то же самое в своих проектах. :) – DevdDexter

+0

Да, теперь я вижу, что ОП сказал, что он сказал это как в раскадровке, так и программно. Меня смутила фраза «если вы настроили протоколы UITableViewDataSource и UITableViewDelegate внутри вашего файла ViewController.h, тогда нет необходимости ...», потому что он не упоминает раскадровки, поэтому без контекста это неверно. Не могли бы вы исправить это немного, чтобы избежать путаницы? – FreeNickname