Проблема в том, что свойство view UITableViewController - это то же самое, что и свойство tableView. У меня была та же проблема: я хотел поместить фиксированный контент над таблицей. Я не хотел менять базовый класс, поскольку он предоставляет множество замечательных функций, которые я не хотел терять или нарушать.
Исправить на самом деле легко. Хитрость заключается в том, чтобы создать собственный набор и получить свойство self.tableView. Затем в loadView вы заменяете представление новым UIView и добавляете tableView к нему. Тогда вы можете добавлять подпредставления вокруг tableView. Вот как это делается:
В шапке:
@interface CustomTableViewController : UITableViewController
{
UITableView *tableView;
}
В .м:
- (UITableView*)tableView
{
return tableView;
}
- (void)setTableView:(UITableView *)newTableView
{
if ( newTableView != tableView )
{
[tableView release];
tableView = [newTableView retain];
}
}
- (void)loadView {
[super loadView];
//save current tableview, then replace view with a regular uiview
self.tableView = (UITableView*)self.view;
UIView *replacementView = [[UIView alloc] initWithFrame:self.tableView.frame];
self.view = replacementView;
[replacementView release];
[self.view addSubview:self.tableView];
//code below adds some custom stuff above the table
UIView *customHeader = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 20)];
customHeader.backgroundColor = [UIColor redColor];
[self.view addSubview:customHeader];
[customHeader release];
self.tableView.frame = CGRectMake(0, customHeader.frame.size.height, self.view.frame.size.width, self.view.frame.size.height - customHeader.frame.size.height);
}
Наслаждайтесь!