我想从 nib 加载 UIViewController
,并返回它的动态类型。
我尝试了几个我发现的函数,但始终是 UIViewController
中的返回类型。
我检查了两次我的 nib 名称是否等于类名 AlertVC
。
我也将 nib 的文件所有者设置为 AlertVC
。
我用来从 nib 加载的函数:
extension UIViewController {
class func loadMeFromXib<T: UIViewController>(_ senderVC:UIViewController, prepareForVC:((T) -> T?)? = nil) {
var viewController:T = T.instantiateFromNib()
// viewController type is UIViewController instead AlertVC
}
static func instantiateFromNib() -> Self {
func instantiateFromNib<T: UIViewController>(_ viewType: T.Type) -> T {
return T.init(nibName: String(describing: T.self), bundle: nil)
}
return instantiateFromNib(self)
}
}
还试过:
class func loadMeFromNib<T: UIViewController>() -> T {
return T(nibName: String(describing: self), bundle: nil)
}
但我总是得到相同的结果 - UIViewController。
像这样使用它:
AlertVC.loadMeFromXib(senderVC!)
我也遇到调试器错误:use of undeclared type 'T'
最佳答案
我有这个问题。如本文所述: Perform a segue from an Xib to ViewContoller
You can't call performSegueWithIdentifier in a Xib class, only in a UIViewController class.
我结束了:
Creating a delegate in Xib class and UIViewController class implements that delegate protocol.
关于Swift - 从 Nib 实例化总是返回 UIViewController 类型而不是动态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45545128/