Swift - 从 Nib 实例化总是返回 UIViewController 类型而不是动态类型
Posted
技术标签:
【中文标题】Swift - 从 Nib 实例化总是返回 UIViewController 类型而不是动态类型【英文标题】:Swift - instantiate From Nib always return UIViewController type instead dynamic type 【发布时间】:2017-08-07 10:50:37 【问题描述】:我想从笔尖加载UIViewController
,并返回它的动态类型。
我尝试了一些我发现的函数,但总是返回 UIViewController
中的类型。
我检查了两次,我的 nib 名称等于类名称AlertVC
。
我也将文件的 nib 所有者设置为 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'
【问题讨论】:
【参考方案1】:我遇到了这个问题。如本文所述: Perform a segue from an Xib to ViewContoller
您不能在 Xib 类中调用 performSegueWithIdentifier,只能在 UIViewController 类。
我结束了:
在 Xib 类和 UIViewController 类中创建委托实现 该委托协议。
【讨论】:
以上是关于Swift - 从 Nib 实例化总是返回 UIViewController 类型而不是动态类型的主要内容,如果未能解决你的问题,请参考以下文章
Swift 中的 NSWindowController。使用 Nib 进行子类化和初始化