我的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。
有什么建议吗?
答案 0 :(得分:0)
我发现了这个问题。
使用xib
个文件代替storyboards
,此问题已修复。
似乎无法更改故事板视图的控制器。
在上面的问题中,当我将originalViewController的视图设置为nil all并将新视图设置为覆盖视图控制器以使新视图与旧视图不同时,它只是它的副本,所以所有的修改不应适用于它的副本。