2017-08-07 34 views
1

我想从笔尖加载UIViewController,并返回它的动态类型。 我尝试了一些我发现的功能,但总是返回类型UIViewController。 我检查了两次,我的笔尖名称等于班级名称AlertVC。 我将该文件的笔尖所有者设置为AlertVCSwift - 实例化从笔尖总是返回UIViewController类型,而不是动态类型

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

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'

回答

0

我有这个问题。由于在这个岗位描述: 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.