uistoryboard - 如何在 UITabBarController 中使用@IBSegueAction?

标签 uistoryboard ios13 xcode11 swift5 ibsegueaction

我有一个带有两个选项卡的选项卡栏。为了避免在 View Controller 中使用可选项,我正在尝试使用 @IBSegueAction

tab bar with two tabs

我初始化标签栏 Controller :

let tabBarController = storyboard.instantiateInitialViewController { coder in
    TabBarController(coder: coder, mainVar: (first: "Hello", second: "World"))
}

我从选项卡栏 Controller 类初始化两个 View Controller :

class TabBarController: UITabBarController {

    let mainVar: (first: String, second: String)

    required init?(coder: NSCoder) {
        fatalError()
    }

    init?(coder: NSCoder, mainVar: (String, String)) {
        self.mainVar = mainVar
        super.init(coder: coder)
    }

    @IBSegueAction func instantiateFirstViewController(coder: NSCoder) -> UIViewController? {
        FirstViewController(coder: coder, firstVar: mainVar.first)
    }

    @IBSegueAction func instantiateSecondViewController(coder: NSCoder) -> UIViewController? {
        SecondViewController(coder: coder, secondVar: mainVar.second)
    }
}

这是其中一个 View Controller :

class FirstViewController: UIViewController {

    let firstVar: String

    required init?(coder: NSCoder) {
        fatalError()
    }

    init?(coder: NSCoder, firstVar: String) {
        self.firstVar = firstVar
        super.init(coder: coder)
    }
}

我将转场连接到相应的 @SegueAction: @SegueAction setup

我的问题是当我运行这个项目时我遇到了这个崩溃: Fatal error

Xcode 没有使用我的初始化程序,而是使用默认的初始化程序。错误信息是: [ Storyboard] 无法找到方法 -[(null) instantiateFirstViewControllerWithCoder:]

编辑:我在 GitHub 上上传了完整的演示项目:demo project

最佳答案

以下文章中描述的解决方案适用于 UITabBarControllerUINavigationController。不过 UISplitViewController 不行。

https://useyourloaf.com/blog/using-ibsegueaction-with-tab-bar-controllers/

简而言之:

  • 创建一个带有容器 View 的根 UIViewController(比如 RootViewController)
  • 设置从容器 View 到您的 UITabBarController
  • 的嵌入转场
  • RootViewController 中实现 @IBSegueAction,例如
@IBSegueAction
func makeFirstViewController(coder: NSCoder) -> UIViewController? { ... }
  • 对于从 UITabBarController 到它的 viewController 的转场,将转场 Action 连接到 RootViewController

关于uistoryboard - 如何在 UITabBarController 中使用@IBSegueAction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58847674/

相关文章:

iphone - IOS:如何创建主视图

UIKit 的 textColor 的 iOS13 白色问题

swiftui - 一起使用 NavigationLink、@EnvironmentObject 和 List 时,Xcode 11 beta 3 崩溃

ios - 多少个 View Controller 是太多的 View Controller ?

ios - 两个 View Controller 之间的 Segue

iOS - Storyboard - 本地化 - 修改 Storyboard后,如何同步到其他语言的 Storyboard?

iOS 13 - 未实例化 CBCentralManager 的蓝牙 radio 状态

swift - iOS SwiftUI 更改每个 View 的默认字体

ios - UICollectionView 始终自动调整单元格大小。不使用从委托(delegate)返回的尺寸

ios - Unresolved 标识符 NavigationButton 错误