Это на самом деле вполне возможно и просто - просто нужно немного перемонтировать. Я столкнулся с подобной ситуацией и закодировал ее, чтобы позволить мне добавлять экраны загрузки поверх моих табличных представлений. Этот подход также позволяет использовать статические ячейки таблицы с собственным содержимым.
Если ваш контроллер является UITableViewController в раскадровке или XIB и вы хотите переназначить self.view для стандартного UIView при сохранении существующего представления таблицы:
Добавьте эти переменные экземпляра в заголовочный файл :
IBOutlet UITableView *tableViewReference; // to keep a reference to the tableview
UIView *viewReference; // a reference to the new background view
В файле Storyboard или XIB: Соедините tableView
в UITableViewController
с переменной tableViewReference
.
Тогда в вашем файле реализации :
// Override the default accessors of the tableview and view
- (UITableView*)tableView { return tableViewReference; }
- (UIView*)view { return viewReference; }
- (void)viewDidLoad
{
[super viewDidLoad];
// instantiate the new self.view, similar to the tableview
viewReference = [[UIView alloc] initWithFrame:tableViewReference.frame];
[viewReference setBackgroundColor:tableViewReference.backgroundColor];
viewReference.autoresizingMask = tableViewReference.autoresizingMask;
// add it as a subview
[viewReference addSubview:tableViewReference];
/* remainder of viewDidLoad */
}
Хотя это может показаться странным, UITableViewController делает много необычных вещей со ссылками за кулисами. Вам нужно подождать до viewDidLoad, чтобы сделать обмен. После этой точки средства доступа будут указывать на правильные UIView
и UITableView
.
Использование:
Что-то вроде
[self.view addSubview:myView];
добавит UIView myView
перед табличным представлением, без myView
прокрутки с содержимым табличного представления.
Примечание: Этот ответ был отредактирован после того, как было указано, что решение содержит пограничный парадоксальный код. UITableViewController делает странные вещи с ссылками, которые он содержит. Некоторый более тщательный тест вывел этот более простой ответ:)