2017-03-15 14 views
0

次のSwift 3コードは別のクラスの別々の迅速なファイルにあります。UIViewController以外のクラスから警告ポップアップを表示するにはどうすればよいですか?

class Login{ 

    func showAlert(message :String){ 

     let alertController2 = UIAlertController(title: "Error", message: "A error occured when checking credentials, try again later.", preferredStyle: .alert) 
     let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil) 
     alertController2.addAction(defaultAction) 
     self.present(alertController2, animated: true, completion: nil) 
    } 
} 

しかし、私は赤のエラーが表示されます。

Use of unresolved identifier 'UIAlertController'

は、どのように私は何かが間違っていたことをユーザに知らせるポップアップを作成することができますか?

答えて

0

まず、あなたが必要とする:

import UIKit 

しかし、あなたの大きな問題は、使用しようとしている現在()メソッドは、のUIViewControllerオブジェクトのメソッドであり、また、それだけでそのビュービューコントローラ上で動作することですすでにビュー階層の一部です。

コードを少しリファクタリングして、警告を表示するビューコントローラを決定する必要があると思います。

0
import Foundation 
import UIKit 
class Utility: NSObject{ 

    func showAlert(_ VC : UIViewController, andMessage message: String , handler :@escaping(UIAlertAction) -> Void){ 

    let alert = UIAlertController(title: "Error", message: message , preferredStyle: UIAlertControllerStyle.alert) 
    alert.addAction(UIAlertAction(title: "Ok", style:UIAlertActionStyle.default, handler: handler)) 
    VC.present(alert, animated: true, completion: nil) 

    } 
} 

これを試してみてください。

1

UIAlertControllerをクラスに見えるようにするには、まずimport UIKitが必要です。

このコードは、モーダルであっても、現在のView Controllerを取得します。

func topViewController() -> UIViewController? { 
    guard var topViewController = UIApplication.shared.keyWindow?.rootViewController else { return nil } 
    while topViewController.presentedViewController != nil { 
     topViewController = topViewController.presentedViewController! 
    } 
    return topViewController 
} 

だから、今、コントローラを取得し、その上に警告を提示することができます。

topViewController()?.present(alertController2, animated: true, completion: nil) 
関連する問題