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 进行子类化和初始化

实例化 Nib 并访问它的子视图

从 nib 实例化 UIView 导致无限循环问题

从nib实例化UIView会导致无限循环问题

如何从 ViewController 中的 xib (nib) 实例化 UIView / UITableView

无法从 nib 实例化 UIView。 “警告:无法加载任何 Objective-C 类信息”