Sun*_*hah 22 iphone objective-c uiviewcontroller ios swift
我带了一个带有单独nib文件的ViewController.我的初始根视图控制器在storyBoard中设置.现在问题是当我推送到这个控制器时,没有调用View hireachy方法(ViewDidLoad,ViewWillApper等).
代码(视图已加载但方法未调用)
var viewController = UIViewController(nibName: "OfferDetailViewController", bundle: nil) as OfferDetailViewController
self.navigationController?.pushViewController(viewController, animated: true);
Run Code Online (Sandbox Code Playgroud)
如果我使用故事板它的工作正常,同样的事情.
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var viewController = mainStoryboard.instantiateViewControllerWithIdentifier("offer") as OfferDetailViewController
self.navigationController?.pushViewController(viewController, animated: true);
Run Code Online (Sandbox Code Playgroud)
问题:使用storyboard View层次结构方法是调用但不是使用单独的nib文件?
ael*_*lam 46
var viewController = OfferDetailViewController(nibName: "OfferDetailViewController", bundle: nil)
Run Code Online (Sandbox Code Playgroud)
Ank*_*ava 16
这是一个很好的通用方法......
extension UIViewController {
class func loadFromNib<T: UIViewController>() -> T {
return T(nibName: String(describing: self), bundle: nil)
}
}
let vc : OfferDetailViewController = OfferDetailViewController.loadFromNib()
Run Code Online (Sandbox Code Playgroud)
类型铸造的解决方案:
extension UIViewController {
static func initFromNib() -> Self {
func instanceFromNib<T: UIViewController>() -> T {
return T(nibName: String(describing: self), bundle: nil)
}
return instanceFromNib()
}
}
Run Code Online (Sandbox Code Playgroud)
享受:
let testVC = TestVC.initFromNib()
testVC.someCustomParam = "someValue"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29636 次 |
| 最近记录: |