Ответ 1
[tabBar setSelectedItem:[tabBar.items objectAtIndex:item.tag]];
Я новичок в разработке iPhone. Я создаю приложение на основе представления. Я добавил панель вкладок в моем представлении (а не контроллер панели вкладок). Установив значение тега vale элемента панели вкладок на 1, 2, я загрузил представление для каждой панели вкладок в событии щелчка элемента панели вкладок.
Я хочу, чтобы панель вкладок 1 была выбрана по умолчанию. Что я должен сделать для этого?
Вот мой код:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
NSLog(@"didSelectItem: %d", item.tag);
[self activateTab:item.tag];
}
- (void)activateTab:(int)index {
switch (index) {
case 1:
self.tab1ViewController =[[tab1 alloc] initWithNibName:@"tab1" bundle:nil];
[self.view insertSubview:tab1ViewController.view belowSubview:tabbar1];
if (currentViewController != nil)
[currentViewController.view removeFromSuperview];
currentViewController = tab1ViewController;
break;
case 2:
self.tab2ViewController =[[tab2 alloc] initWithNibName:@"tab2" bundle:nil];
[self.view insertSubview:tab2ViewController.view belowSubview:tabbar1];
if (currentViewController != nil)
[currentViewController.view removeFromSuperview];
currentViewController = tab2ViewController;
break;
default:
break;
}
}
Я добавил панель вкладок в построителе интерфейса. Могу ли я что-нибудь сделать в построителе интерфейса?
[tabBar setSelectedItem:[tabBar.items objectAtIndex:item.tag]];
Для быстрого, если tabBar равен @IBOutlet
используйте в viewDidLoad:
tabBar.selectedItem = tabBar.items?.first
Не можете ли вы просто вызвать свой метод для выбора вкладки всякий раз, когда вы показываете представление? Например:
[self activateTab:1];
Чтобы изменить выбранный элемент панели вкладок, используйте:
[myTabBar setSelectedItem:myTabBarItem];
Где myTabBarItem - ваш экземпляр UITabBarItem для соответствующего представления.
Вы можете установить индекс по умолчанию для TabBarController, установив свойство selectedIndex. Это можно поместить в viewDidLoad или до нажатия контроллера, если вы это делаете. Это делается только тогда, когда вы используете TabBarController, а не только TabBar.
tabBarController.selectedIndex = 1;
Если вы используете TabBar без TabBarController, тогда вы должны сделать это так.
self.tabBar.selectedItem = [self.tabBar.items objectAtIndex:1];
, если UITabBar уже не обрабатывается UITabBarController
[self.TabBar setSelectedItem:[[self.TabBar items] objectAtIndex:1]];
здесь TabBar - это выход для UITabBar.
, если UITabBar уже обработан UITabBarController
[self.tabBarController setSelectedIndex:1];
Следующее отлично работает для меня в Swift 1.2
myTabBar.selectedItem = myTabBarItem
где myTabBar и myTabBarItem являются IBOutlets для соответствующих элементов на раскадровке.
Swift 3:
@IBOutlet weak var uiTabBarOutlet: UITabBar!
uiTabBarOutlet.selectedItem = uiTabBarOutlet.items?[0]
Как я это сделал, используя UITabBarDelegate
:
#import "InfoSecurity.h"
#import "TabsCell.h"
@interface InfoSecurity () <UITabBarDelegate>
@property (strong, nonatomic) IBOutlet UITabBar *mainTab;
@property(weak,nonatomic) NSArray *TabArray;
@end
@implementation InfoSecurity
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
if (_mainTab.selectedItem.tag == 1) {
NSLog(@"TAB 1");
}
else if (_mainTab.selectedItem.tag == 2) {
NSLog(@"TAB2");
}
else if (_mainTab.selectedItem.tag == 3)
{
NSLog(@"TAB3");
}
else
{
NSLog(@"TAB NOT WORKING");
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
Не забудьте указать делегат UITabBar в построителе интерфейса как класс контроллера представления, а также установить <UITabBarDelegate>
после объявления @interface
в классе.
вы можете установить первую вкладку для выделения следующим образом:
- (void)viewDidLoad {
[super viewDidLoad];
if (tabBar.items.count >= 1) {
[tabBar setSelectedItem:[tabBar.items objectAtIndex:0]];
}
}
Swift 4:
override func viewDidLoad() {
super.viewDidLoad()
self.selectTab(at: 1, animated: false)
}