2017-08-07 7 views
1

UIViewControllerをnibからロードし、その動的型を返したいとします。 私は見つけた機能をほとんど試していませんでしたが、常に戻り値の型はUIViewControllerです。 ペン先名がクラス名AlertVCと等しいことを2回確認しました。 ファイルのオーナーをAlertVCに設定しました。Swift - インスタンス化Nibから常に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.

関連する問題