从UITableViewCell呈现UIAlertController

我想添加警报到自定义UITableViewCell呈现UIAlertView我需要从UIViewController调用presentViewController。 但是,我不知道如何从UITableViewCell类访问当前的UIViewController实例。 下面的代码是我试图用扩展名做这个。

我得到这个错误

expression式parsing为未使用的函数。

 extension UIViewController { class func alertReminden(timeInterval: Int) { var refreshAlert = UIAlertController(title: "Refresh", message: "All data will be lost.", preferredStyle: UIAlertControllerStyle.Alert) refreshAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action: UIAlertAction!) in Alarm.createReminder("Catch the Bus", timeInterval: NSDate(timeIntervalSinceNow: Double(timeInterval * 60))) })) refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: { (action: UIAlertAction!) in println("Handle Cancel Logic here") })) UIViewController.presentViewController(refreshAlert) } } class CustomRouteViewCell: UITableViewCell { 

您可以使用此扩展名来查找呈现该单元格的viewController

 extension UIView { var parentViewController: UIViewController? { var parentResponder: UIResponder? = self while parentResponder != nil { parentResponder = parentResponder!.nextResponder() if parentResponder is UIViewController { return parentResponder as! UIViewController! } } return nil } } 

或者使用rootViewController来呈现:

UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(refreshAlert, animated: true, completion: nil)

尝试replace到这行代码:

Swift 2

 UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(refreshAlert, animated: true, completion: nil) 

Swift 3

 UIApplication.shared.keyWindow?.rootViewController?.present(refreshAlert, animated: true, completion: nil) 

另一种方法是在表视图单元类中声明协议和委托属性,将控制器设置为单元委托,并在能够呈现警报视图控制器的控制器中实现协议。

狮子座的解决scheme为我工作。 我用它来显示自定义集合视图单元格中的AlertView。

更新Swift 3.0:

 extension UIView { var parentViewController: UIViewController? { var parentResponder: UIResponder? = self while parentResponder != nil { parentResponder = parentResponder!.next if parentResponder is UIViewController { return parentResponder as! UIViewController! } } return nil } } 

希望能帮助到你。