2015-05-19 183 views
0

我在我的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的标题是,这个问题不只是冠军任何那在主视图控制器中以编程方式更改不会影响子视图控制器。

有什么建议吗?

+0

幽默我,如果你尝试在你的RBaseViewController类中打印“Hello world”,它会打印字符串吗? –

+0

@EnricoSusatyo是的,我现在测试它,打印它。 –

+0

从哪里,以及何时调用getOverride?该方法使用什么控制器(或其他对象)? – rdelmar

回答

0

我发现了这个问题。

通过使用xib文件而不是storyboards此问题已修复。

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

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