我想从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
不能在Xib类中调用performSegueWithIdentifier,只能在
UIViewController类。
我最终:
在Xib类和UIViewController类中创建委托实现
代表协议。
关于swift - Swift-从Nib实例化总是返回UIViewController类型而不是动态类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45545128/