58

谁能告诉我在 iOS 中使用情节提要时如何设置默认选项卡。我似乎无法弄清楚如何做到这一点。

谢谢

4

12 回答 12

126

虽然您可以像其他答案一样以编程方式设置初始选择的选项卡,但要在情节提要中实现相同而无需触摸代码,您将执行以下操作:

  1. 在 Storyboard 界面中选择 Tab Bar Controller
  2. 在实用程序面板中显示身份检查器
  3. 添加新的“用户定义的运行时属性”
  4. 将键路径设置为“selectedIndex”
  5. 将类型设置为“数字”
  6. 将值设置为您希望选择的选项卡的索引(例如,值 1 将选择第二个选项卡)
  7. 保存 Storyboard,构建并运行应用程序

完成上述步骤后,它应该是这样的:

于 2015-01-16T23:05:35.643 回答
78

对于某些 subclass 来说,这似乎有些矫枉过正UITabBarController,但是,我认为它提供了最干净的解决方案。

  1. 创造BaseTabBarController.swift
  2. 添加一个@IBInspectable并将其设置为viewDidLoad

    class BaseTabBarController: UITabBarController {
    
        @IBInspectable var defaultIndex: Int = 0
    
        override func viewDidLoad() {
            super.viewDidLoad()
            selectedIndex = defaultIndex
        }
    
    }
    
  3. 在情节提要中,将您设置UITabBarController为新的子类:

在此处输入图像描述

  1. 转到Attributes Inspector添加设置新属性Default Index

在此处输入图像描述

  1. 达达!(:
于 2015-05-19T09:18:34.177 回答
35
  1. 创建一个新的文件子类UITabBarController
  2. 在末尾添加viewDidLoad

    self.selectedIndex = 1;

  3. 将此新文件设置为UITabBarController情节提要中的自定义类。

你完成了。

于 2013-10-17T03:09:11.163 回答
24

以下代码对我有用:

UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.selectedIndex = 2;
于 2013-05-03T05:54:35.910 回答
12

您可以使用以下两种方法之一:

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

或对象的直接方法

[tabBar setSelectedItem:myUITabBarItem];

或者您可以将它们组合起来执行此操作:

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

但我还没有测试过这种方法,希望这会有所帮助!

于 2012-11-07T22:27:03.460 回答
4

在 appdelegate 查找applicationDidBecomeActive功能并添加此行

let tabBarController = self.window?.rootViewController as! UITabBarController
tabBarController.selectedIndex = 0 // any index you want
于 2015-11-02T03:54:55.537 回答
3

当您只想更改默认选择的控制器时,我的变体适用,不再需要自定义。只需添加以下类别

//  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 的回答

于 2018-08-01T12:53:22.537 回答
2

viewDidLoad()TabBarController,设置selectedIndex为任何你想要的。(0将是第一个,3将是第四个,等等)

于 2016-05-22T17:09:56.450 回答
1

可以通过 Xcode 8 或更高版本来实现(刚测试过,不知道这个版本之前是否可用)

按照@Joshua Finch 所说的那样执行步骤,但是:

  1. 选择栏项目而不是 TabBar
  2. 转到“用户定义的运行时属性”
  3. 添加新密钥
  4. 将其命名为“选定”
  5. 将其类型设置为 boolean 并选择 true / 或选中复选框
于 2016-10-05T14:19:07.803 回答
0

基于 Aviel Gross 的回答,我只想为 UITabBar 实现这个,而不是 UITabBarController。这可以按如下方式完成:

class BaseTabBar: UITabBar {

    @IBInspectable var defaultIndex: Int = 0 {
        didSet {
            self.selectedItem = self.items?[defaultIndex]
        }
    }
}
于 2017-11-19T12:52:01.560 回答
0

如果您从例如登录屏幕导航到您的 UITabBarController,那么在此处设置选择可能最不痛苦:

        let tabs = self.storyboard?.instantiateViewController(withIdentifier: "tabs") as! UITabBarController
        tabs.selectedIndex = 1
        self.present(tabs, animated:false)
于 2019-05-03T09:25:43.257 回答
0

在 InterfaceBuilder 中,断开所有 segue,然后按照您希望它们出现的顺序重新连接它们。

于 2019-06-21T17:33:52.730 回答