以编程方式修改不适用于子类(viewController)

时间:2015-05-19 16:02:24

标签: ios swift

我的iOS应用程序可能需要覆盖一些 viewControllers 所以我开发了以下方法来发现是否存在覆盖 ViewController 我使用它,否则使用原始< EM>的viewController

internal class func getOverride<T: RBaseViewController>(id: String, mClass: AnyClass) -> T
{
    let storyBoard = UIStoryboard(name: RConstants.Static.MAIN_STORYBOARD_NAME, bundle: nil)
    let originalViewController = storyBoard.instantiateViewControllerWithIdentifier(id) as! T

    var className = NSStringFromClass(mClass)

    // Removing the prefix of class name if exists
    if let index: String.Index = className.rangeOfString(".")?.startIndex.successor()
    {
        className = className.substringFromIndex(index)
    }

    // Override class name
    var overrideClassName = className! + RConstants.Static.CLASSES_OVERRIDE_SUFFIX

    if let mClass: AnyClass = NSClassFromString(overrideClassName)
    {
        RLog.debug("View controller override found")
        // ViewController is overrode
        if let overeideClass: T.Type = mClass as? T.Type
        {
            // Create instance and return
            let overrodeViewController = overeideClass()

            let view = originalViewController.view
            originalViewController.view = nil
            overrodeViewController.view = view

            return overrodeViewController
        }
    }

    return originalViewController
}

覆盖viewController 扩展来自原始的,只是可能会有一些方法发生变化。

但问题是我在viewController上应用的修改不会影响overrode viewController。

例如,在父viewController类中,我有以下代码:

override func viewDidLoad()
{
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    title = "Map"
}

但是在Child viewController中,标题是为空,这个问题不仅适用于主视图控制器中更改的标题任何 以编程方式不会影响子viewController。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。

使用xib个文件代替storyboards,此问题已修复。

似乎无法更改故事板视图的控制器。

在上面的问题中,当我将originalViewController的视图设置为nil all并将新视图设置为覆盖视图控制器以使新视图与旧视图不同时,它只是它的副本,所以所有的修改不应适用于它的副本。