(iphone) UIViewController, имеющий UITableViewController в качестве члена, чтобы сделать tableView своим подвидом?

Я хочу, чтобы представление viewController имело tableView в качестве своего подпредставления.

Поскольку мне нужно переопределить некоторые методы tableViewController, такие как

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- (UITableViewCell*) tableView: (UITableView*) tableView cellForRowAtIndexPath: (NSIndexPath*) indexPath
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

, у меня был мой viewController, чтобы иметь (пользовательский) TableViewController вместо tableView.

Затем я делаю что-то вроде

UIView* holderView = [[[UIView alloc] initWithFrame:] autorelease];
[self.view addSubview holderView]; //self is viewController
[holderView addSubview: tableViewController.view];
.. change tableViewController.view.backgroundColor so on..

затем tableView волшебным образом (?) заполняет держательView и работает нормально.

Но я чувствую, что это довольно необычно, и мне интересно, как лучше всего иметь настраиваемое представление таблицы в качестве подпредставления?

Спасибо


person eugene    schedule 04.04.2011    source источник


Ответы (1)


То, что я сделал (и, как мне кажется, делается чаще), - это сделать viewController также делегатом таблицы. Это означает, что контроллер имеет такие функции, как viewDidLoad, но ему также нужны numberOfRowsInSection, cellForRowAtIndexPath и т. д. При установке делегата таблицы для viewController (self) это означает, что таблица будет искать информацию, необходимую для построения таблицы. тот делегат. Делегат содержит эти табличные функции.

РЕДАКТИРОВАТЬ: я только что увидел «пользовательский» префикс на вашем столе. В этом случае я бы все равно использовал описанный мной метод, но вместо этого использовал CustomCells.

person Joetjah    schedule 04.04.2011
comment
ах, спасибо, тогда мне просто нужно создать tableView и установить делегата tableView для viewController. мне не понадобится доступ к tableViewController.view .. я правильно понимаю? , делегат и источник данных будут установлены через tableView? - person eugene; 04.04.2011
comment
@Eugene Юджин Это правильно, вам не нужен доступ к представлению. Однако вам нужно получить доступ к вашему viewController.h. Измените @interface viewController:UIViewController { на @interface viewController:UIViewController<UITableViewDataSource, UITableViewDelegage> {. После этого XCode (это ваш SDK?) знает необходимые методы и выводит ошибку, если вы этого не сделаете. - person Joetjah; 04.04.2011