У меня возникли проблемы с иерархией представления и рисованием на iPhone.
Если говорить более конкретно, у меня есть приложение панели вкладок с определенной вкладкой, которая содержит табличное представление, в котором я хотел бы, чтобы при выделении определенной ячейки UIPickerView перемещался вверх. Скольжение на самом деле не проблема (или, по крайней мере, я предполагаю, что это не произойдет, как только я разберусь с этой частью), но я не могу заставить сборщик (или любой UIView, в этом отношении) показываться поверх панель вкладок.
Думаю, проблема в том, как я настроил эту вкладку. Обычно в любой другой вкладке я мог бы сделать что-то вроде этого:
[self.tabBarController.view addSubview:pickerView];
и все будет работать нормально.
Но для этой конкретной вкладки у меня есть UISegmentedControl в панели навигации, который переключается между двумя различными UITableViews. Таким образом, контроллер представления, связанный с вкладкой (назовите его TabViewController), имеет свои собственные экземпляры этих двух контроллеров табличного представления (TableOneViewController и TableTwoViewController) и вставит текущее выбранное табличное представление (на основе сегментированного элемента управления) как подпредставление представления TabViewController.
Если бы мне не нужно было переключать представления, как это, я мог бы просто позвонить
[tabViewController.tabBarController.view addSubview:pickerView];
из TabViewController и средство выбора появится над панелью вкладок. Но дело в том, что я не могу вызвать это ни в одном из контроллеров табличного представления, выбранных на этой вкладке (ну, я могу, но это ничего не делает). Я попытался передать это свойство tabBarController в контроллер табличного представления, но это тоже не работает. Я также пытался возиться с делегатом приложения (которого я стараюсь избегать), но безрезультатно.
Есть ли что-то простое, что я здесь упускаю, или это нельзя сделать? Я чувствую, что так и должно быть, поскольку клавиатура может скользить по панели вкладок в этом табличном представлении. Есть ли способ просто нарисовать все текущие виды и подпредставления?
Вот что вызывается, когда сегментированный элемент управления выбран в TabViewController.m и переключает представления:
- (IBAction)switchViews:(id)sender
{
if (self.tableOneViewController.view.superview == nil)
{
if (self.tableOneViewController == nil)
{
TableOneViewController *tempOneController = [[TableOneViewController alloc] initWithNibName:@"TableOneViewController" bundle:nil];
self.tableOneViewController = tempOneController;
[tempOneController release];
}
[tableTwoViewController.view removeFromSuperview];
[self.view insertSubview:tableOneViewController.view atIndex:0];
}
else
{
if (self.tableTwoViewController == nil)
{
TableTwoViewController * tempOneController = [[TableTwoViewController alloc] initWithNibName:@"TableTwoViewController" bundle:nil];
self.tableTwoViewController = tempOneController;
[tempOneController release];
}
[tableOneViewController.view removeFromSuperview];
[self.view insertSubview:tableTwoViewController.view atIndex:0];
}
}
И вот что происходит, когда я пытаюсь добавить средство выбора в TableOneViewController.m:
UIPickerView *tempPicker = [[UIPickerView alloc] init];
tempPicker.delegate = self;
tempPicker.dataSource = self;
tempPicker.showsSelectionIndicator = YES;
tempPicker.clipsToBounds = NO; // thought this might work, but doesn't
self.picker = tempPicker;
[tempPicker release];
[self.view addSubview:pickerPicker]; // adds beneath tab bar!