我正在尝试向自定义添加提醒,UITableViewCell以提出一个UIAlertView我需要从调用presentViewController的提示UIViewController。但是,我不知道如何UIViewController从UITableViewCell该类访问当前实例。下面的代码是我尝试使用扩展名进行的操作。
UITableViewCell
UIAlertView
UIViewController
我得到这个错误
表达式解析为未使用的函数。
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呈现:
rootViewController
UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(refreshAlert, animated: true, completion: nil)
Swift 4.2更新
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 } }
UIApplication.shared.keyWindow?.rootViewController?.present(alertVC, animated: true, completion: nil)