2017-11-02 23 views
1

xibでtouchedEnded関数が呼び出されたときにViewControllerを表示したいと思いますが、実装方法はわかりません。iOS swift UIViewでtouchesEndedが呼び出されたとき、presencetViewController Storyboardの他のxibまたはViewController

私のプロジェクトの一部です。 // secondeViewController.swift

class secondeViewController.swift: UIViewController { 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

    } 


} 

答えて

1

// ViewController.swift

class ViewController: UIViewController { 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

     // add custom xib view (day view) 
     let view = Bundle.main.loadNibNamed("ScheduleView", owner: self, options: nil)?.first as! ScheduleView 
     view.frame = self.view.frame 

     self.view.addSubview(view) 
    } 


} 

// ScheduleView.swift

class ScheduleView.swift: UIView { 

    /* 
    // Only override draw() if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override func draw(_ rect: CGRect) { 
     // Drawing code 
    } 
    */ 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     super.touchesBegan(touches, with: event) 

     print("touchesBegan") 
    } 
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
     super.touchesEnded(touches, with: event) 

     print("touchesEnd") 

     // move scene in here 
     // show secondViewController 
    } 



} 

のみ、コントローラが別のビューコントローラを提示することができる表示します。 委任パターンを使用してこれを行うことができます。

このプロトコルに準拠して、あなたのViewControllerでScheduleViewに

var presentVCDelegate: PresentVCDelegate 

をプロパティを追加し、新しいプロトコル

protocol PresentVCDelegate { 
    func presentVC() 
} 

を作成し、自己としてビューのデリゲートを設定

//in view will appear 
view.presentVCDelegate = self 

ドンプロトコルに従うことを忘れないでください

ScheduleView中にあなたtouchEnd方法で
extension ViewController: PresentVCDelegate { 
    func presentVC() { 
     //present your secondViewController here 
    } 
} 

、最終的には、

self.presentVCDelegate.presentVC() 
+0

ありがとうございます。できます。 – user3525889

0

デリゲートメソッドを呼び出すこれは私が解決策です。

// ViewController.swift 

class ViewController: UIViewController { 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

     // add custom xib view (day view) 
     let view = Bundle.main.loadNibNamed("ScheduleView", owner: self, options: nil)?.first as! ScheduleView 
     view.frame = self.view.frame 

     //in view will appear 
     view.presentVCDelegate = self 

     self.view.addSubview(view) 
    } 


} 

extension ViewController: PresentVCDelegate { 
    func presentVC() { 
     //present your secondViewController here 
    } 
} 

// ScheduleView.swift 

protocol PresentVCDelegate { 
    func presentVC() 
} 

class ScheduleView: UIView { 
    var presentVCDelegate: PresentVCDelegate 
    /* 
    // Only override draw() if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override func draw(_ rect: CGRect) { 
     // Drawing code 
    } 
    */ 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     super.touchesBegan(touches, with: event) 

     print("touchesBegan") 
    } 
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
     super.touchesEnded(touches, with: event) 

     print("touchesEnd") 

     // move scene in here 
     // show secondViewController 

    } 



} 

// secondeViewController.swift 

class secondeViewController: UIViewController { 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

    } 


} 
関連する問題