编程修改将不适用于儿童类(的viewController)
问题描述:
我在我的iPhone应用程序可能需要重写一些viewControllers所以我制定了以下的方法来发现是否越权的ViewController存在我用它从原来的以其他方式使用viewController。编程修改将不适用于儿童类(的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"
}
但在儿童的viewController的标题是空,这个问题不只是冠军,任何那在主视图控制器中以编程方式更改不会影响子视图控制器。
有什么建议吗?
答
我发现了这个问题。
通过使用xib
文件而不是storyboards
此问题已修复。
似乎无法更改故事板视图的控制器。
在上面的问题中,当我将originalViewController的视图设置为全部并设置新视图覆盖视图控制器,以使新视图与旧视图不一样时,它只是它的一个副本,所以所有修改不应该适用于它的副本。
幽默我,如果你尝试在你的RBaseViewController类中打印“Hello world”,它会打印字符串吗? –
@EnricoSusatyo是的,我现在测试它,打印它。 –
从哪里,以及何时调用getOverride?该方法使用什么控制器(或其他对象)? – rdelmar