на главном экране моего проекта у меня есть TableView, с панелью навигации вверху и панелью инструментов внизу. Дело в том, что одна из кнопок на панели инструментов должна сдвинуть UISegmentedControl с панели инструментов. Я уже реализовал этот элемент управления в пользовательском UIView, НО, если я просто добавлю его в свой rootviewcontroller.view и вставлю его на место, он будет прокручиваться вместе с остальной таблицей, что нежелательно (хотелось бы, чтобы оно отображалось как расширение панели инструментов).
Итак, что мне делать? В rootViewController я делаю
self.filterView = [[FilterView alloc] initWithTarget:self.tableView reloadDataSelector:@selector(reloadData)];
[[self.view superview] addSubview:self.filterView];
[[self.view superview] bringSubviewToFront:self.filterView];
Я добавляю управляющее представление (self.filterView) к суперпредставлению моего представления, и это помещает его выше прокрутки табличного представления.
НО, теперь проблема. Как только tableView выходит из поля зрения (я выдвигаю другое представление на navigationController или, особенно, если приложение переходит в фоновый режим), это представление перестраивается, и мое представление контроллера перемещается в (0,0).
Дело в том, что, нажимая новые представления на навигационном контроллере, я могу управлять им, перемещая его в viewWillAppear и viewWillDisappear в моем rootViewController. Но когда приложение переходит в фоновый режим и возвращается, эти функции не вызываются.
Итак, есть ли способ
(а) предотвратить перемещение моего вида контроллера
(b) обнаружение непреднамеренного перемещения
(c) обнаружение прихода и ухода из фона из rootViewController
???
Я знаю, что могу обнаружить переходы в фоновый режим в appDelegate, но я не буду чувствовать себя комфортно, имея дело с проблемами компоновки там.
Спасибо !!
EDIT:
Чтобы добавить информацию, если я сделаю
NSLog(@"%@",[self.view superview]);
//I get <UIViewControllerWrapperView: 0x61589d0; frame = (0 64; 320 372); autoresize = W+H; layer = <CALayer: 0x615d9c0>>
EDIT2: Полагаю, я мог бы сначала создать свою собственную оболочку UIView, загрузить в нее всю мою текущую иерархию представлений и поместить туда представление контроллера. Ребята, вы думаете, это стоило бы хлопот? не проще ли?
EDIT3: Закончилась возможность изменения моего rootViewController с UITableViewController на UIViewController, и программно добавлен tableView, как предложил Фил ниже. Теперь я могу управлять своим основным видом так, как мне нравится, и, поскольку я помещаю туда свое сегментированное представление управления, я могу управлять его позиционированием, в отличие от предыдущего, когда я размещал его в UIViewControllerWrapperView, который я не слишком уверен, кто контролирует или что это делает с его подпредставлениями.
Так что, просто из любопытства, кто-нибудь знает, почему UIViewControllerWrapperView, который оборачивал представление моего UITableViewController, перемещал мой UIView при возвращении из фона ??
Чтобы уточнить, установка была такой:
UIViewControllerWrapperView
|
|UITableView
|Custom SegmentedControl UIView