Кто-нибудь может рассказать мне, как установить вкладку по умолчанию при использовании раскадровки в iOS. Я не могу понять, как это сделать.
Спасибо
Кто-нибудь может рассказать мне, как установить вкладку по умолчанию при использовании раскадровки в iOS. Я не могу понять, как это сделать.
Спасибо
Вы можете использовать один из этих двух способов:
tabBar.items = tabBarItems;
tabBar.selectedItem = [tabBarItems objectAtIndex:0];
или прямой метод из объекта
[tabBar setSelectedItem:myUITabBarItem];
или вы можете комбинировать их для этого:
tabBar.items = tabBarItems;
[tabBar setSelectedItem:[tabBarItems objectAtIndex:0]];
но я еще не проверял этот метод, надеюсь, что это поможет!
Пока вы можете установить исходную выбранную вкладку программно, как и другие ответы, чтобы добиться того же самого в своем раскадровке, не касаясь кода, вы должны выполнить следующее:
Это должно выглядеть так, как только вы достигли вышеуказанных шагов:
Может показаться излишним для некоторых подкласса UITabBarController
, но, я думаю, он обеспечивает самое чистое решение.
BaseTabBarController.swift
Добавьте @IBInspectable
и установите его в viewDidLoad
:
class BaseTabBarController: UITabBarController {
@IBInspectable var defaultIndex: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
selectedIndex = defaultIndex
}
}
В раскадровке установите UITabBarController
как ваш новый подкласс:
UITabBarController
;Добавьте это в конец viewDidLoad
:
self.selectedIndex = 1;
Установите этот новый файл как пользовательский класс в UITabBarController
вашей раскадровки.
Вы закончили.
Для меня работал следующий код:
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.selectedIndex = 2;
В viewDidLoad()
TabBarController
установите selectedIndex
в нужное вам положение. (0
будет первым, 3
будет четвертым и т.д.)
в appdelegate найдите applicationDidBecomeActive
функцию и добавьте эти строки
let tabBarController = self.window?.rootViewController as! UITabBarController
tabBarController.selectedIndex = 0 // any index you want
Вы можете достичь этого через Xcode 8 или новее (просто протестировали его и не знаете, доступно ли это до этой версии)
Сделайте шаги как @Joshua Finch, но:
Мой вариант подходит, когда вы хотите просто изменить выбранный контроллер по умолчанию, больше никаких настроек. Просто добавьте следующую категорию:
// 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: я предпочитаю @Джошуа-Финч ответ
Основываясь на ответе Авиля Гросса, я просто хотел реализовать это для UITabBar, в отличие от UITabBarController. Это можно сделать следующим образом:
class BaseTabBar: UITabBar {
@IBInspectable var defaultIndex: Int = 0 {
didSet {
self.selectedItem = self.items?[defaultIndex]
}
}
}
При условии, что вы переходите на свой UITabBarController, например, с экрана входа в систему, было бы наименее трудно установить выбор там:
let tabs = self.storyboard?.instantiateViewController(withIdentifier: "tabs") as! UITabBarController
tabs.selectedIndex = 1
self.present(tabs, animated:false)
В InterfaceBuilder отключите все сегменты, затем снова подключите их в том порядке, в котором вы хотите, чтобы они появлялись.