谁能告诉我在 iOS 中使用情节提要时如何设置默认选项卡。我似乎无法弄清楚如何做到这一点。
谢谢
虽然您可以像其他答案一样以编程方式设置初始选择的选项卡,但要在情节提要中实现相同而无需触摸代码,您将执行以下操作:
完成上述步骤后,它应该是这样的:
对于某些 subclass 来说,这似乎有些矫枉过正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;
您可以使用以下两种方法之一:
tabBar.items = tabBarItems;
tabBar.selectedItem = [tabBarItems objectAtIndex:0];
或对象的直接方法
[tabBar setSelectedItem:myUITabBarItem];
或者您可以将它们组合起来执行此操作:
tabBar.items = tabBarItems;
[tabBar setSelectedItem:[tabBarItems objectAtIndex:0]];
但我还没有测试过这种方法,希望这会有所帮助!
在 appdelegate 查找applicationDidBecomeActive
功能并添加此行
let tabBarController = self.window?.rootViewController as! UITabBarController
tabBarController.selectedIndex = 0 // any index you want
当您只想更改默认选择的控制器时,我的变体适用,不再需要自定义。只需添加以下类别:
// 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:我更喜欢@joshua-finch 的回答
在viewDidLoad()
中TabBarController
,设置selectedIndex
为任何你想要的。(0
将是第一个,3
将是第四个,等等)
可以通过 Xcode 8 或更高版本来实现(刚测试过,不知道这个版本之前是否可用)
按照@Joshua Finch 所说的那样执行步骤,但是:
基于 Aviel Gross 的回答,我只想为 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 中,断开所有 segue,然后按照您希望它们出现的顺序重新连接它们。