Swift - 实例化 From Nib 始终返回 UIViewController 类型而不是动态类型



我想从 nib 加载UIViewController,并返回它的动态类型。 我尝试了几个我找到的函数,但总是UIViewController中的返回类型。 我检查了两次,我的笔尖名称是否等于类名AlertVC。 我将笔尖的文件所有者也设置为AlertVC

我用来从笔尖加载的功能:

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'

我遇到了这个问题。 如这篇文章所述: 执行从 Xib 到 ViewContoller 的 segue

您不能在 Xib 类中调用 performSegueWithIdentifier,只能在 UIViewController 类。

我最终:

在 Xib 类和 UIViewController 类中创建委托实现 该委托协议。

最新更新