2017-07-30 8 views
0

modalPresentationStyleはstrangly私は簡単な質問をした

に動作します:

class HomeController: UIViewController,UITableViewDataSource,UITableViewDelegate, AddingDisciplineDelegate, LogoutUserDelegate { 
     override func viewDidLoad() { 
       super.viewDidLoad() 
       let controller = SeePlugAlertModalView() 
       controller.modalPresentationStyle = .overFullScreen  
       self.present(controller, animated: true, completion: nil) 
     } 
     (...) 
} 

class SeePlugAlertModalView : UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.view.isOpaque = false 
     self.modalTransitionStyle = .crossDissolve 
     view.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5) 
    } 

enter image description here

をしかし、私はSeePlugAlertViewでmodalPresentationStyleを置けば、私の見解を提示したが隠しています親ビューコントローラ。 (背景色のアルファベットが0.5の場合でも)。

class HomeController: UIViewController,UITableViewDataSource,UITableViewDelegate, AddingDisciplineDelegate, LogoutUserDelegate { 
       override func viewDidLoad() { 
         super.viewDidLoad() 
         let controller = SeePlugAlertModalView()  
         self.present(controller, animated: true, completion: nil) 
       } 
       (...) 
     } 

class SeePlugAlertModalView : UIViewController { 

      override func viewDidLoad() { 
       super.viewDidLoad() 
       self.view.isOpaque = false 
       self.modalPresentationStyle = .overFullScreen 
       self.modalTransitionStyle = .crossDissolve 
       view.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5) 
     } 

enter image description here

+0

問題は、2番目のケースでは、最初に 'present'を呼び出してから' modalPresentationStyle'が変更されたと思います。 'self.present'の前に' _ = controller.view'を呼び出すとどうなりますか? – Sulthan

+0

したがって、 'present'の前にどのようにmodalPresentationStyleを設定できますか?私は作成するコンストラクタで? awakeFromNibに動作しない、私は)awakeFromNib FUNC SeePlugAlertModalView 'オーバーライド(に設定 –

答えて

0

問題がSeePlugAlertModalViewのviewDidLoadが呼び出された時点で2番目のコード、で手遅れになる、ということです。 SeePlugAlertModalViewのプレゼンテーションは既に開始されています。したがって、HomeControllerから以前の設定を削除したので、プレゼンテーション時のプレゼンテーションスタイルの設定はで、となり、デフォルトでは.fullScreenになっています。

解決策は、その初期化子やawakeFromNibのように、以前 SeePlugAlertModalViewの表示スタイルを設定することです。

+0

{self.modalPresentationStyle = .overFullScreen }' –

+0

私はそのようなコンストラクタを作成した: 'のinit(){ でsuper.init( –

+0

このビューコントローラはペン先から来ていないので、 'awakeFromNib'では動作しません。これは' awakeFromNib'では動作しません。これはペン先から来るView Controllerで動作します。 – matt