ios - 从 Storyboard 转换到子类

标签 ios swift uikit storyboard

假设我有一个 BaseViewController。然后我有 2 个场景,New 和 Edit,它们共享相同的 UI 和大部分逻辑。所以我创建了类 NewViewController 和 EditViewController,继承了 BaseViewController。当我尝试从 Storyboard 中实例化“BaseViewController”时出现问题,因为我想指定是哪个实现。

if isEdit { 
    storyboard.instantiateViewControllerWithIdentifier("baseVCIdentifier") as! EditViewController 
} else {
   storyboard.instantiateViewControllerWithIdentifier("baseVCIdentifier") as! NewViewController 
}

然后我得到一个错误: 无法将类型“Test.BaseViewController”(0x10ee5e0f0)的值转换为“Test.EditViewController”(0x10ee5f000)。

我不想在 Storyboard上同时使用两个 ViewController,因为我不想重做相同的 UI 2 次。

最佳答案

您可以使用instantiateViewController(identifier:creator:)来完成此操作。

我假设您的 Storyboard中有 View Controller ,其标识符为template。分配给 Storyboard中 View Controller 的类应该是父类(super class):

let storyboard = UIStoryboard(name: "main", bundle: nil)

let viewController = storyboard.instantiateViewController(identifier: "template") { coder in 
    // this passes us with a coder for the storyboard, we can now init the preferred subclass.

    if useSubclass {
        return SpecialViewController(coder: coder)
    } else {
        return BaseViewController(coder: coder)
    }
}

这是 documentation

关于ios - 从 Storyboard 转换到子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34016755/

相关文章:

iOS:加载没有 nib 文件的第二个 View Controller

iphone - 将一个按钮(作为 subview )添加到多个 UIView

ios - UITableView 可见单元自动布局后计算 View 位置

ios - 如何将 Cocoapods 与 Swift 项目集成?

ios - Xcode 10.1 - 模拟器崩溃试图在横向 iPhone 8 Plus、iPhone XR 和 iPhone XS Max 中呈现 SKStoreProductViewController

ios - PHVideoRequestOptions 的 progressHandler 未调用

ios - 为什么我的动态物理体会穿过我的静态物理体?

ios - 加载从 Parse 数据类添加的新单元格

ios - 为什么我不能在 Swift 中更改 View 的框架大小?

ios - SearchBar显示过滤,但未显示正确的数据