Вопрос иерархии представлений iPhone: Как нарисовать представления на панели вкладок? - PullRequest
3 голосов
/ 12 февраля 2010

У меня возникли проблемы с иерархией представления и рисованием на 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!

Ответы [ 2 ]

7 голосов
/ 13 февраля 2010
[[[UIApplication sharedApplication] keyWindow] addSubview:someViewController];

Убедитесь, что загружаемый viewController имеет высоту 480px!

Чтобы удалить его снова, используйте [someViewController removeFromSuperview];

2 голосов
/ 12 февраля 2010

Может быть, вы хотите сделать просто

[tabBarController presentModalViewController:someViewController animated:YES];

Это должно скользить поверх всего, что у вас есть на экране.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...