我有一个应用程序可以检查用户是否下载了某个特定的文件,如果他们没有提醒他们有机会下载它。这段代码是从UITableViewCell中调用的,但我不知道如何用tableView调用view控制器来模拟按第一行(必需的文件总是在第一行中)。
下面是一段代码

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)

        }

最佳答案

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

protocol DownloadDelegate {
    func shouldDownloadFile()
}

因此,您需要将MainVC设置为类中的DownloadDelegate,该类通过创建类似于var downloadDelegate: DownloadDelegate?的变量弹出警报,在“下载”操作中,您可以说:
self.downloadDelegate?.shouldDownloadFile()

这将通知MainVC,您可以通过执行您已经计划好的self.tableView.selectRow...操作来做出反应。

10-08 16:56