我想創建UIViewController的子類,然後通過故事板或以編程方式將數據傳遞給它。什麼到目前爲止,我已經嘗試是有一類subViewController是一個UIViewController用故事板或編程創建視圖時的自定義init
import UIKit
class subViewController: UIViewController {
var s1 = String()
init(myString: String) {
self.s1 = myString
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@IBOutlet var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print(self.s1)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
然後在身份督察此連接到視圖控制器
和AppDelegate.swift
一個subViewController迅速文件func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let SubVC = subViewController(myString: "Komic")
self.window?.rootViewController = SubVC
self.window?.makeKeyAndVisible()
return true
}
加載黑屏但註銷myString。據我瞭解,它不創建視圖,但它只是創建類的實例,這就是爲什麼它給了我黑屏。我也知道這部分
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
當故事板給你的觀點時運行。但是我不能在那裏傳遞數據,這就是爲什麼我要做這個程序設計的原因。有沒有可能做到這一點?我知道我可以實例化與故事板的標識符,但我找不到一種方法來通過我的數據....任何幫助?
我不知道我怎麼會用這個傳遞數據。如果我創建故事板並實例化View Controller,那麼我的自定義init不會運行,對吧?所以要麼我必須在loadView()中創建我的視圖層次結構(我不知道該怎麼做)或者使用storyboard加載我的視圖(並且不傳遞任何數據)。 –
是的,這是(imo)使用storyboard/Nib的缺點之一是你不能在初始化時將任何值注入你的視圖控制器,因爲初始化是由框架完成的。通常,您在創建後設置這些屬性,或者在prepareForSegue方法中使用segues。在swift中,這提出了一個問題必須是可選或隱式解包可選屬性 –
我看到......這確實是一個問題,因爲如果我想要一個超類,所有我的類繼承,所以我可以訪問任何我想要的在應用程序的任何地方:( –