it-roy-ru.com

Настройка вкладки по умолчанию при использовании раскадровок

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

Спасибо

48
user1145581

Вы можете использовать один из этих двух методов: 

tabBar.items = tabBarItems;
tabBar.selectedItem = [tabBarItems objectAtIndex:0];

или прямой метод от объекта

[tabBar setSelectedItem:myUITabBarItem];

или вы можете объединить их, чтобы сделать это:

tabBar.items = tabBarItems;
[tabBar setSelectedItem:[tabBarItems objectAtIndex:0]];

но я еще не тестировал этот метод, надеюсь, это поможет!

11
Trevor Rudolph

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

  1. Выберите контроллер панели вкладок в интерфейсе раскадровки
  2. Показать Инспектора идентификации на панели «Утилиты»
  3. Добавить новый «Определенный пользователем атрибут времени выполнения»
  4. Установите путь к ключу «selectedIndex»
  5. Установите тип на «номер»
  6. Установите в качестве значения индекс вкладки, которую вы хотите выбрать (например, значение 1 выберет вторую вкладку)
  7. Сохраните раскадровку, соберите и запустите приложение

Вот как это должно выглядеть, когда вы выполнили вышеуказанные шаги:

117
Joshua Finch

Для некоторых это может показаться излишним для подкласса UITabBarController, но я думаю, что это обеспечивает самое чистое решение.

  1. Создать BaseTabBarController.Swift
  2. Добавьте @IBInspectable и установите его в viewDidLoad:

    class BaseTabBarController: UITabBarController {
    
        @IBInspectable var defaultIndex: Int = 0
    
        override func viewDidLoad() {
            super.viewDidLoad()
            selectedIndex = defaultIndex
        }
    
    }
    
  3. В раскадровке установите UITabBarController своим новым подклассом:

enter image description here

  1. Перейдите к Атрибуту Инспектора и добавьте новое свойство Индекс по умолчанию :

enter image description here

  1. та-да! (:
64
Aviel Gross
  1. Создайте новый подкласс файла UITabBarController;
  2. Добавьте это в конце viewDidLoad:

    self.selectedIndex = 1;

  3. Установите этот новый файл в качестве пользовательского класса в UITabBarController вашей раскадровки.

Вы сделали.

29
maxagaz

Следующий код работал для меня:

UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.selectedIndex = 2;
22
Rahul Singh

В viewDidLoad()TabBarController установите selectedIndex на то, что вы хотите. (0 будет первым, 3 будет четвертым и т. д.)

2
jake

в appdelegate найдите функцию applicationDidBecomeActive и добавьте следующие строки

let tabBarController = self.window?.rootViewController as! UITabBarController
tabBarController.selectedIndex = 0 // any index you want
1
zizutg

Вы можете достичь этого с помощью Xcode 8 или более поздней версии (только что протестировал и не знаю, доступен ли он до этой версии)

Делайте шаги, как сказал @ Джошуа Финч, но:

  1. Выберите элемент панели вместо TabBar
  2. Получил "Пользовательский атрибут времени выполнения"
  3. Добавить новый ключ 
  4. Назовите это "выбранный"
  5. Установите его тип в логическое значение и выберите true/или установите флажок 
1
mohammad alnajjar

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

//  UITabBarController+DefaultPage.h
#import <UIKit/UIKit.h>

@interface UITabBarController(DefaultPage)

@end


//  UITabBarController+DefaultPage.m
#import "UITabBarController+DefaultPage.h"

@implementation UITabBarController(DefaultPage)

- (void)viewDidLoad {
    [super viewDidLoad];

    self.selectedIndex = 1;
}

@end

pS: я предпочитаю @ Джошуа-Финч ответ

1
WINSergey

Опираясь на ответ Авиеля Гросса, я просто хотел реализовать это для UITabBar, а не для UITabBarController. Это можно сделать следующим образом:

class BaseTabBar: UITabBar {

    @IBInspectable var defaultIndex: Int = 0 {
        didSet {
            self.selectedItem = self.items?[defaultIndex]
        }
    }
}
0
ThomasHaz

При условии, что вы переходите на свой UITabBarController, например, с. экран входа в систему может быть наименее болезненным, чтобы установить выбор там:

        let tabs = self.storyboard?.instantiateViewController(withIdentifier: "tabs") as! UITabBarController
        tabs.selectedIndex = 1
        self.present(tabs, animated:false)
0
Anton Duzenko