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

标签 swift uiviewcontroller

我想从 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

You can't call performSegueWithIdentifier in a Xib class, only in a UIViewController class.

我结束了:

Creating a delegate in Xib class and UIViewController class implements that delegate protocol.

关于Swift - 从 Nib 实例化总是返回 UIViewController 类型而不是动态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45545128/

相关文章:

ios - Container View 好像有 UINavigationBar 一样被下推?

ios - 从 xib 文件中的操作按钮推送另一个 View Controller

swift - 带有自定义单元格的 UITableView 中的部分

ios - 如何以编程方式获取有关 iphone 的设备数据提供程序(如 Verizon/AT&T)的详细信息?

ios - Swift 2.0 beta 词典扩展

ios - 将方形 UIImage 转换为圆形 UIIMage 以与 CAEmitterCell.contents 一起使用

swift - 如何让用户拍照并分享?

ios - 我的 View Controller 没有出现在屏幕上

ios - segue完成后如何执行一些代码?

ios - 如何调用presentViewController?