Реализовать действие Back в UITabBarController - PullRequest
0 голосов
/ 13 января 2010

У меня есть ControlView (MenuControllerView) с кнопкой внутри, когда я нажимаю на кнопку, появляется новый ViewController с TabBarController, созданным программно, как это:


UIView* topView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)];

tabBarController = [[UITabBarController alloc] init];
viewController1 = [[ViewController1 alloc] init];
viewController2 = [[ViewController2 alloc] init];
viewController3 = [[ViewController3 alloc] init];
viewController4 = [[ViewController4 alloc] init];

tabBarController,viewControllers = [NSArray arrayWithObjects:viewController1 , viewController2 , viewController3 ,viewController4, nil];
[[self tabBarController] setSelectedIndex:1];
[topView addSubView:[tabBarController view]];

Вместо отображения ViewController1 для первой кнопки Item, я хочу поместить в него действие Назад, чтобы вернуться к моему MenuViewController, но я не знаю, как это сделать.

Спасибо

Ответы [ 4 ]

1 голос
/ 13 января 2010

Рассматривали ли вы представление UITabBarController в качестве контроллера модального представления и реализацию UITabBarControllerDelegate? например мне кажется, это работает (я заставляю третью вкладку вернуться к MenuViewController здесь):

@interface MenuViewController : UIViewController <UITabBarControllerDelegate>
...

- (IBAction) onButtonPressed:(id)sender
{

    UITabBarController* tabBarController = [[UITabBarController alloc] init];
    viewController1 = [[ViewController1 alloc] init];
    viewController2 = [[ViewController2 alloc] init];
    viewController3 = [[ViewController3 alloc] init];

    tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1 , viewController2 , viewController3 , nil];
    [[self tabBarController] setSelectedIndex:1];

    tabBarController.delegate = self;
    [self presentModalViewController:tabBarController animated:NO];
}

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;
{
    if (viewController == viewController3)
    {
        [self dismissModalViewControllerAnimated:NO];
        return NO;
    }
    return YES;
}
0 голосов
/ 13 января 2010

Это то, что вы пытаетесь сделать?

alt text

Это автоматически создается с помощью UINavigationController после отправки на дочерний контроллер представления.

[self.navigationController pushViewController:yourChildViewController animated:YES];
0 голосов
/ 13 января 2010

Я сомневаюсь, что этот подход хорош. Вы нарушите типичное поведение iPhone, которое запутает пользователей. TabBarController разработан (функционально и технически) для переключения между представлениями, в то время как NavigationController предназначен для перемещения и выталкивания видов (вперед и назад). Конечно, вы можете комбинировать их (что не всегда легко), но вы не должны использовать TabBar как NavigationBar.

0 голосов
/ 13 января 2010

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

[[tabBarController view] removeFromSuperview];

Если вы просто хотите обработать выбор элемента панели вкладок, вы можете использовать tabBar:didSelectItem: метод протокола UITabBarDelegate.

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