2010-02-24 2 views
15

Я новичок в разработке iphone. Я создаю приложение на основе представления. Я добавил панель вкладок на моем представлении (а не контроллер панели вкладок). Установив тег vale элемента панели вкладок в 1, 2, Я загрузил представление для каждой панели вкладок в событии клика элемента табуляции. Мне нужно, чтобы панель вкладок 1 была выбрана по умолчанию. Что я должен сделать для этого?Как установить пункт 1 панели вкладок, который будет выбран по умолчанию в iphone?

Вот мой код: -

- (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; 
    } 
} 

Я добавил панель вкладок в интерфейсе builder.Can я сделать любую вещь в интерфейсе строителя?

Пожалуйста, помогите мне. Спасибо.

+2

Почему вы не используете TabBarController снова? – Bearddo

+7

Потому что TabBarController добавляет все виды головной боли. Вы получаете удобство по очень высокой цене. Вы не можете добавлять UITabBarControllers в контроллеры навигации. Это просто уродливо. К сожалению, Apple не дает никакой хорошей документации по созданию простого UITabBar, и все учебники онлайн используют XIB, а не код. Уродливые, уродливые, уродливые !!!! –

+0

Вы хотите изменить цвет изображения на панели вкладок, если выбрано? –

ответ

9

Не можете ли вы просто позвонить своему методу, чтобы выбрать вкладку, когда вы показываете представление? Как так:

[self activateTab:1]; 

Чтобы изменить панель вкладок пункт выбирается использование:

[myTabBar setSelectedItem:myTabBarItem]; 

Где myTabBarItem Ваш экземпляр UITabBarItem для соответствующего вида.

35
[tabBar setSelectedItem:[tabBar.items objectAtIndex:item.tag]]; 
+11

это неверно: «objectAtIndex: item.tag». Тег может не иметь никакого отношения к индексу в массиве. Таким образом, это работает только в том случае, если теги нумеруются идентичными индексам массива (например, 0 - 4) – Toad

2

Следующая работает отлично для меня в Swift 1.2

myTabBar.selectedItem = myTabBarItem 

где myTabBar и myTabBarItem являются IBOutlets к соответствующим элементам на раскадровке.

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. 
} 
0

Не забудьте установить делегат UITabBar в интерфейсе строителя быть класс контроллера представления, а также установить <UITabBarDelegate> после @interface декларации в классе.

вы можете установить первую вкладку, чтобы быть выделены в качестве так:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    if (tabBar.items.count >= 1) { 
     [tabBar setSelectedItem:[tabBar.items objectAtIndex:0]]; 
    } 
} 
2

если UITabBar НЕ уже обрабатывается UITabBarController

[self.TabBar setSelectedItem:[[self.TabBar items] objectAtIndex:1]]; 

здесь TabBar является розетка для UITabBar ,

если UITabBar уже обрабатывается UITabBarController

[self.tabBarController setSelectedIndex:1]; 
4

Вы можете установить индекс по умолчанию TabBarController, установив свойство SelectedIndex. Это можно поместить в viewDidLoad или до нажатия контроллера, если вы это делаете. Это делается только тогда, когда вы используете TabBarController, а не только TabBar.

tabBarController.selectedIndex = 1; 

Если вы используете TabBar без TabBarController, тогда вам нужно сделать это так.

self.tabBar.selectedItem = [self.tabBar.items objectAtIndex:1]; 
9

Для быстрого 3.0, если TabBar является @IBOutlet использование в viewDidLoad:

tabBar.selectedItem = tabBar.items![0] 
+1

, вы можете использовать 'tabBar.items ?.first' вместо' tabBar.items! [0] ' –

1

Swift 3:

@IBOutlet weak var uiTabBarOutlet: UITabBar! 

uiTabBarOutlet.selectedItem = uiTabBarOutlet.items?[0] 
0

Swift 4:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.selectTab(at: 1, animated: false) 
} 
Смежные вопросы