Переопределение UITableViewController's cellForRowAtIndexPath в Objective-C - PullRequest
0 голосов
/ 06 июля 2011

У меня есть контроллер представления MainVC, который содержит представление, в котором я хочу переключаться между различными таблицами. У меня есть «абстрактный» класс с именем InfoVC, который расширяет UITableViewController и содержит несколько методов, которые должны быть переопределены, иначе они выдают исключение. Наконец, у меня есть несколько классов, которые расширяют InfoVC и реализуют «абстрактные» методы в InfoVC, а также методы, которые переопределяют numberOfRowsInSection и cellForRowAtIndexPath tableView.

Вот так я загружаю таблицу в MainVC. В этом случае TemperatureInfoVC расширяет InfoVC, self.subVC имеет тип InfoVC, а switchView - это представление в MainVC:

TemperatureInfoVC *sVC = [[TemperatureInfoVC alloc] initWithStyle:UITableViewStylePlain];
self.subVC = sVC;
[sVC release];
[switchView insertSubview:self.subVC.view atIndex:0];

Моя проблема в том, что таблица всегда загружается пустой. Из установки точек останова я вижу, что NumberOfRowsInSection в TemperatureInfoVC вызывается, но не вызывается ни ячейка TemperatureInfoVC, ни InfoVC cellForRowAtIndexPath. Однако, если я изменю первую строку в коде выше на:

InfoVC *sVC = [[InfoVC alloc] initWithStyle:UITableViewStylePlain];

, тогда InfoVC numberOfRowsInSection и cellForRowAtIndexPath вызываются правильно. Кто-нибудь знает, почему CellForRowAtIndexPath TemperatureInfoVC не вызывается?

Ответы [ 2 ]

0 голосов
/ 26 июля 2011

Упс, разобрался.Я загружал данные из NSMutableArray в TemperatureInfoVC, который был установлен в MainVC, но я устанавливал данные до того, как инициализировал subVC, поэтому, конечно, в таблице не было данных.

0 голосов
/ 06 июля 2011

Я предполагаю, что вы не устанавливаете делегат (UITableViewDelegate) и источник данных (UITableViewDatasource).Обычно делегат и реализация источника данных находятся внутри пользовательского UITableViewController, поэтому (если не подключен в IB), где-то должно быть это:

tableView.delegate = self;
tableView.dataSource = self;

часто в пределах -loadView или -viewDidLoad:

...