从TableViewcell Swift模拟tableview行选择

时间:2017-03-16 20:20:10

标签: swift uitableview

我有一个应用程序,用于检查用户是否已下载特定文件,以及他们是否有机会提醒他们下载该文件。从UITableViewCell中调用此代码,但我不知道如何使用tableView调用视图控制器来模拟按第一行(必要文件始终在第一行)。

以下是一段代码

if (fileLbl.text == baseMapDisplayname) {
            let alertController = UIAlertController(title: "Basemap Not Downloaded", message: "Please first download the Offline Basemap", preferredStyle: .alert)

            var rootViewController = UIApplication.shared.keyWindow?.rootViewController
            if let navigationController = rootViewController as? UINavigationController {
                rootViewController = navigationController.viewControllers.first
            }
            if let tabBarController = rootViewController as? UITabBarController {
                rootViewController = tabBarController.selectedViewController
            }

            alertController.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel   ,handler: nil))
            alertController.addAction(UIAlertAction(title: "Download", style: UIAlertActionStyle.default,handler: { (action: UIAlertAction!) in
                //TODO - Simulate action of selecting first row of tableview

               //this does not work
                let indexPath = IndexPath(row: 0, section: 0)
                MainVC().tableView.selectRow(at: indexPath, animated: true, scrollPosition: .bottom)
                MainVC().tableView.delegate?.tableView!(tableView, didSelectRowAt: indexPath)

            }))
            rootViewController?.present(alertController, animated: true, completion: nil)

        }

2 个答案:

答案 0 :(得分:1)

您需要编写一个MainVC符合的简单协议,并且需要包含一个函数来通知MainVC按下“下载”按钮。像这样:

protocol DownloadDelegate {
    func shouldDownloadFile()
}

因此,您需要通过创建类似MainVC的变量将DownloadDelegate设置为具有该警报的类中的var downloadDelegate: DownloadDelegate?,并在“下载”操作中可以说:

self.downloadDelegate?.shouldDownloadFile()

这将通知MainVC,您可以通过执行您已计划的self.tableView.selectRow...事情做出反应。

答案 1 :(得分:0)

试试这个:

let indexPath = IndexPath(row: 0, section: 0);
self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none)
self.tableView(self.tableView, didSelectRowAt: indexPath)