popView из UITabBarController внутри UINavigationController - PullRequest
0 голосов
/ 05 мая 2010

Я создаю приложение на основе шаблона Utility из Xcode, к которому я добавил еще несколько представлений. Моя структура приложения будет выглядеть следующим образом:

  • MainView (меню приложения)

    • Перевернутый вид (калькулятор)

    • UINavigationController

    • Просмотр настроек

      • viewDiDLoad: UITabBarController

                - Tab1 view (options)
                - Tab2 view (information text)
        

Я могу правильно перейти от моего основного вида к моему боковому виду, который также является корневым видом контроллера навигации. На моем оборотном виде я нажимаю второй вид моего контроллера навигации (представление «Настройки»), который настроен для отображения UITabBarController, с двумя вкладками, как только он загружается (с viewDidLoad).

Если я удаляю UITabBarController, я могу без проблем вернуться к моему флип-боку, используя «popViewController» из моего вида «Настройки». Проблема возникает, если я загружаю UITabBarController в viewDiDLoad в моем виде «Настройки» ... вкладки работают отлично, но я больше не могу вернуться к своему флип-боковому виду (корневому представлению контроллера навигации).

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

До сих пор я пробовал следующие методы:

  • [self.navigationController popViewControllerAnimated: YES];

  • [self.navigationController popToRootViewControllerAnimated: YES];

  • [self.navigationController popToViewController: FlipSideViewController animated: YES];

Но, похоже, они не работают. Первые два ничего не делают (экран остается прежним), а третий не распознает «FlipsideViewController» (может быть, потому что это делегат MainViewController?).

Есть ли способ проверить, что именно делает кнопка «назад» на панели навигации, если я ее активирую?

Должен ли я использовать делегатов?

Можно ли вызвать метод popViewController в моем представлении настроек из любого из двух представлений вкладок?

Это мой оборотный взгляд:

- (IBAction)showSettingsView {
    SettingsViewController *controller = [[SettingsViewController alloc] initWithNibName:@"SettingsView" bundle:nil];
    controller.title = @"Settings";
    [self.navigationController pushViewController:controller animated:YES];
    [controller release];
}

Это мой вид настроек:

- (void)viewDidLoad {
    [super viewDidLoad];

    tabBarController = [[UITabBarController alloc] init];

    Tab1ViewController* vc1 = [[Tab1ViewController alloc] init];
    Tab2ViewController* vc2 = [[Tab2ViewController alloc] init];

    NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, nil];
    tabBarController.viewControllers = controllers;

    [self.view addSubview:tabBarController.view];
}

И метод возврата в одном из представлений Tab:

- (IBAction)backFromTab1View {
    [self.navigationController popToViewController:FlipSideViewController animated:YES];
}

Большое спасибо и извините, если вопрос слишком простой!

1 Ответ

0 голосов
/ 06 мая 2010

Я действительно решил проблему, создав собственный UINavigationBar в представлении «Настройки» и используя:

[self.view insertSubview:tabBarController.view belowSubview:myNavigationBar];

, который вставляет остальную часть представления ниже панели навигации, и я все еще могу использовать его для настройки кнопки,откроет вид и вернется к предыдущему экрану.

Мне потребовалось некоторое время, чтобы понять разницу между "addSubview" и "insertSubview + underSubview".Извините за это!

...