2015-05-19 184 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的視圖設置爲全部並設置新視圖覆蓋視圖控制器,以使新視圖與舊視圖不一樣時,它只是它的一個副本,所以所有修改不應該適用於它的副本。