2017-07-16 4 views
0

ユーザーがUIViewController以外のクラスのボタンをタップしても成功しなかった場合、ステータスバーを非表示にしようとしています。UIViewController以外のクラスでUIAlertControllerを表示しているときにステータスバーを非表示にする方法はありますか?

public extension UIAlertController 
{ 
    func show() 
    { 
     let win = UIWindow(frame: UIScreen.main.bounds) 
     let vc = UIViewController() 
     vc.view.backgroundColor = .clear 
     win.rootViewController = vc 
     win.windowLevel = UIWindowLevelAlert + 1 
     win.makeKeyAndVisible()  
     vc.present(self, animated: true, completion: nil) 
    } 
} 
それは、 jazzgilにより、以下の答えから参照された

:私のUIButtonアクションで

ios - present UIAlertController on top of everything regardless of the view hierarchy

私は実装私はUIAlertControllerを提示するには、次のコードを使用しています

以下:

@IBAction func setImage(_ sender: UIBarButtonItem) 
{ 
    let alertView = UIAlertController(title: "Title", message: "Message", preferredStyle: UIAlertControllerStyle.alert) 

    // Create the alert's action button 
    let okAction = UIAlertAction(title: "OK", style: .default, handler: { (action: UIAlertAction!) in 



    }) 

    let cancelAction = UIAlertAction(title: "CANCEL", style: .destructive, handler: nil) 

    alertView.addAction(okAction) 
    alertView.addAction(cancelAction) 

    alertView.show() 
} 

私は、拡張内で次の機能を追加しようとしました:

override open var prefersStatusBarHidden: Bool 
{ 
    return true 
} 

はその後alertView.modalPresentationCapturesStatusBarAppearance = trueと同様にalertView.setNeedsStatusBarAppearanceUpdate()を設定しますが、ステータスバーが常に表示されているようです。

誰かが正しい方向に私を導くことができますか?

ありがとうございます!

答えて

1

希望すると助かります。ステータスバーは、(alertviewコントローラを提示する前に、あなたのケースで)

func hideStatusBar() { 
    UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar 
} 

を、このメソッドを呼び出すと、ステータスバーが(alertviewコントローラを却下した後)

func updateStatusBarToPreviousState() { 
    UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal 
} 
+0

を、このメソッドを呼び出す取り戻すために非表示にするには

説明してくださいアンサーと使い方 – Pangu

+0

単にalertStatusBarを呼び出すだけで、ステータスバーを隠すことができ、alertviewコントローラを消した後、コールバックメソッドupdateStatusBarToPreviousStateを表示するだけです。 –

+0

'hideStatusBar'は機能しますが、私のokActionで' updateStatusBarToPreviousState'を呼び出すと、ステータスバーは決して再表示されませんか? – Pangu

関連する問題