Подтвердить что ты не робот

Программное нажатие кнопки UITabBar в Xcode

Извините за вопрос новичков. У меня есть UITabBar в моем главном окне, а также массив UINavigationControllers для каждой вкладки. Структура похожа на приложение iPod, поскольку основные виды можно увидеть, выбирая элементы TabBar, а затем пользователь может продолжить работу с NavigationController, нажав представления в стек.

То, что я хотел бы сделать, это сделать эквивалент нажатия кнопки TabBar внизу от любого из подзонов в коде (т.е. изменить выбранное свойство TabBar и отобразить запуск первого контроллера представления для вкладка).

Любая помощь будет принята с благодарностью.

Dave

4b9b3361

Ответ 1

[myTabBarController setSelectedIndex:index]

EDIT: Ответ на вопрос части 2 из комментария:

Вы можете определить метод в AppDelegate для перехода на другую вкладку.

И вы можете получить appdelegate из любого места и отправить сообщение. что-то вроде:

 MyAppDelegate *appDelegate = (MyAppDelegate*) [[UIApplication sharedApplication] delegate];
 [appDelegate SwitchToTab:index]

Ответ 2

в качестве альтернативы...

[self.parentViewController.tabBarController setSelectedIndex:3];

Ответ 3

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

Во всяком случае, я надеюсь, что это поможет кому-то:

Я делал то, что сказал Пракаш, и ничего не происходило. Это потому, что для получения указателя на делегат моего приложения я делал это:

AppDelegate_Phone *appDelegate = [[AppDelegate_Phone alloc] init];

Когда я должен был это сделать:

AppDelegate_Phone *appDelegate = (AppDelegate_Phone *) [[UIApplication sharedApplication] delegate];

Ошибка новичка.

Ответ 4

Для этого вам просто нужно взять контроллер UITabBar -

.h Файл -

UITabBarController *_pTabBarController;
@property (nonatomic, retain) IBOutlet  UITabBarController *_pTabBarController;

.m File -
// synthesize it 
@synthesize  _pTabBarController;    

At initial load 

// You can  write one function to add tabBar - 

// As you have already mentioned you have created an array , if not 

_pTabBarController = [[UITabBarController alloc] init];
    NSMutableArray *localViewControllersArray = [[NSMutableArray alloc] initWithCapacity:4];
    UINavigationController *theNavigationController;

    _pController = [[Controller alloc] initStart];  
    _pController.tabBarItem.tag = 1;
    _pController.title = @"Baranches";
    theNavigationController = [[UINavigationController alloc] initWithRootViewController:_pController];
    theNavigationController.tabBarItem.tag = 1;
    theNavigationController.tabBarItem.image = [UIImage imageNamed:@"icon_branches.png"];
    [localViewControllersArray addObject:theNavigationController];
    [theNavigationController release];

чем вы можете установить индекс в соответствии с вашими потребностями

self._pTabBarController.selectedIndex = 0; // as per your requirements

Ответ 5

[self.parentViewController.tabBarController setSelectedIndex:3];

Выбрал индекс для меня, но он просто выделил индекс navbarcontroller как активный индекс, но пока он выделил этот индекс, он был фактически на другом контроллере представления, чем это было предложено элементом tabbarmenu.

Просто хотел добавить, что я использовал это из своего контроллера представления, и он выполнялся, как кто-то на самом деле нажал кнопку menuitem; от кода:

UITabBarController *MyTabController = (UITabBarController *)((AppDelegate*) [[UIApplication sharedApplication] delegate]).window.rootViewController;
[MyTabController setSelectedIndex:1];

Спасибо за этот пост/ответы, это помогло мне в моем проекте.

Ответ 6

Я хотел сделать что-то подобное, но для XCode 6.4 iOS (8.4) setSelectedIndex сам по себе этого не сделает.

Добавьте контрольные элементы на панели вкладок в список, а затем используйте в некоторых функциях что-то вроде следующего:

FirstViewController *firstVC = [[self viewControllers] objectAtIndex:0];
[self.selectedViewController.view removeFromSuperview]
[self.view insertSubview:firstVC.view belowSubview:self.tabBar];
[self.tabBar setSelectedItem:self.firstTabBarItem];
self.selectedViewController = firstVC;

У вас может быть аналогичный код уже внутри вашего didSelectedItem..

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

   if (item == self.firstTabBarItem) 
      // Right here
    }
    else if ...
}