我有一个应用程序,用于检查用户是否已下载特定文件,以及他们是否有机会提醒他们下载该文件。从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)
}
答案 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)