从表视图数据源中删除之前删除确认警报

时间:2016-04-28 14:25:37

标签: ios swift uitableview datasource

我想在你从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)
           }
       }
   }

2 个答案:

答案 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的概念,因此它不再只是数据源了。

希望这会有所帮助。