UISplitView с панелью инструментов / вкладкой в ​​нижней части подробного представления - PullRequest
2 голосов
/ 16 марта 2011

Итак, здесь.Я начал со стандартного готового приложения для iPad.Корневой вид слева и подробный вид справа.Подробное представление имеет панель инструментов вверху.

Я хотел бы добавить панель вкладок в нижней части подробного представления и загрузить вкладки в подробном представлении между панелью инструментов панели инструментов.

Вот в чем проблема, нужно ли добавить другое представление между ними для загрузки вкладок, если да, как мне изменить его размер и учесть высоту панели инструментов и вкладок.

Очистить?

Надеюсь, кто-то может указать мне в правильном направлении.Примеры были бы хорошими, каждый пример в Интернете, кажется, просто из коробки привет стиль мира.

1 Ответ

2 голосов
/ 26 апреля 2011

Да, ответ действительно очень прост. Контроллеры UITabBarController, такие как SplitViewControllers, были предназначены Apple для того, чтобы когда-либо быть только Root View Controller, и, следовательно, вы не можете вкладывать TabBarController в другое представление, однако вы можете вложить UITabBar в представление.

Я добавил панель вкладок в представление сведений внизу, панель навигации вверху, а затем представление местозаполнителя между ними. Все в Интерфейсном Разработчике !, Вы захотите включить все с автоматическим изменением размера в представлении Заполнителя.

Далее, внедрите UITabBarDelegate. Для этого вам понадобится:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {

После этого вы можете использовать item.tag, который, если вы дадите каждому элементу уникальный тег в Интерфейсном Разработчике, сообщит вам, на какой вкладке нажал пользователь. Я установил определенные значения для моего:

#define VIEW_TAB_A 0
#define VIEW_TAB_B 1
#define VIEW_TAB_C 2

Тогда вам захочется ... ну, лучше, я просто дам вам посмотреть

    - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
    [self switchToView:item];
}

- (void) switchToView : (UITabBarItem*) item {

    if( currentViewController != nil ) {
        [currentViewController viewWillDisappear:NO];
        [currentViewController.view removeFromSuperview];               
    }

    switch(item.tag) {
        case VIEW_TAB_A:
            currentViewController = self.viewA;
            break;
        case SCAN_VIEW_TAB_B:
            currentViewController = self.viewB;
            break;
        case PROMOTIONS_VIEW_TAB_C:
            currentViewController = self.viewC;
            break;
    }

    UIView *aView = currentViewController.view; 

    aView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    aView.frame = placeholderView.frame;

    [currentViewController viewWillAppear:NO];

    [self.view insertSubview:aView aboveSubview:placeholderView];
    if( currentViewController != nil ) {
        [currentViewController viewDidDisappear:NO];
    }
    [currentViewController viewDidAppear:NO];
}

Не забудьте выделить виды (viewA, viewB, viewC) сначала в viewDidLoad и, очевидно, освободить в dealloc. Также обратите внимание на маску autoresizing!

Надеюсь, это поможет другим.

...