我想在你从UITable视图中删除一行之前显示警告。
但是,如果不将视图控制器接口传递给数据源,我该怎么做呢。
class BaseTableDataSource: NSObject, UITableViewDataSource {
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
//1. Show alert and delete the block
??? But how can you show the alert with out View controller reference??
//viewcontroller.presentViewController(alertController, animated: true, completion: nil)
}
}
}
答案 0 :(得分:0)
通常我首先要创建一个sharedInstance通知管理器来处理我的警报,但是你可以在运行中尝试这种方法:
let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert)
alert.delegate = self
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil))
let window = UIWindow(frame: UIScreen.mainScreen().bounds)
window.rootViewController?.presentViewController(alert, animated: true,completion: nil)
更新:
根据您的代码,您也可以这样做:
if let tableViewController = tableView.delegate {
tableViewController.presentViewController(alert, animated: true,completion: nil)
}
答案 1 :(得分:-1)
有几种方法可以做到这一点。
1)丑陋的一个:从BaseTableDataSource发送NSNotification并在ViewController端捕获它。作为NSNotification的对象 - 您可以传递“AlertActionViewModel”或将配置UIAlertActionController的内容
2)您可以通过委托或闭包创建回调。但最后你将完全放弃BaseTableDataSource的概念,因此它不再只是数据源了。
希望这会有所帮助。