从自定义类调用presentViewController

Pie*_*ter 4 ios swift uialertcontroller

我读了这篇文章这一个关于如何调用presentViewController形式的UIViewController子类之外.在我的例子中,自定义类是NSObject的子类.以下方法是唯一有效的方法(从我读过的例子):

UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(alertController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

我的问题:是否有一个更好的解决方案,不依赖于appDelegate(因为我知道这种方法在设计方面不是很整洁)......

Dun*_*n C 9

我有时会创建一个实用程序类来显示警报等.我通常做的是让我的方法呈现视图控制器将当前视图控制器作为参数.这种方法效果很好.

编辑:

这是我的一个项目中的文件Utils.swift的示例方法.它定义了一个类函数,它在当前视图控制器上显示UIAlertController警报:

class Utils
{
  static let sharedUtils = Utils()

  class func showAlertOnVC(
    targetVC: UIViewController, 
    var title: String, 
    var message: String)
  {
    title = NSLocalizedString(title, comment: "")
    message = NSLocalizedString(message, comment: "")
    let alert = UIAlertController(
      title: title, 
      message: message, 
      preferredStyle: UIAlertControllerStyle.Alert)
    let okButton = UIAlertAction(
      title:"OK",
      style: UIAlertActionStyle.Default,
      handler:
      {
        (alert: UIAlertAction!)  in
    })
    alert.addAction(okButton)
    targetVC.presentViewController(alert, animated: true, completion: nil)
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码定义了一个类Utils.请注意,它没有任何基类,在Swift中是OK.

接下来,它定义了一个公共静态变量sharedUtils,您可以使用它来访问singleton Utils类.

最后,它定义了一个类方法showAlertOnVC,可用于在当前视图控制器之上显示UIAlertController警报.要使用showAlertOnVC它,请从当前视图控制器调用它并将self作为targetVC参数传递.