Swift - 实例化从Nib总是返回UIViewController类型而不是动态类型

时间:2017-08-07 10:50:38

标签: swift uiviewcontroller

我想从nib加载UIViewController,并返回它的动态类型。 我尝试了几个我找到的函数,但总是UIViewController中的返回类型。 我检查了两次,我的笔尖名称等于类名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 个答案:

答案 0 :(得分:0)

我有这个问题。如本文所述: Perform a segue from an Xib to ViewContoller

  

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

我结束了:

  

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