如何向 UIAlertAction 操作添加第二个操作 (segue)?

How do I add a second action (segue) to a UIAlertAction action?

请原谅,我对 ios 编码比较陌生:

我已经实现了带有 "Cancel" 和 "Buy" 按钮的 actionSheet。购买按钮操作成功执行,没问题。

但是,我想做的是添加另一个(第二个)操作,让用户在调用原始(第一个)操作后自动转到另一个屏幕。

简化:我想按下下载产品的购买按钮(在我的 actionSheet 上),然后自动转到下载屏幕以查看我的新下载。

private func setBuyButton() -> Void {

    // Buy button action sheet
    actionSheet = UIAlertController(title: "CONFIRM PURCHASE", message: "\(self.products.title) will be added to your Download page", preferredStyle: .actionSheet)

    let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)

    let confirmPurchase = UIAlertAction(title: "Buy", style: .default) { action in

        var productList = [String: Bool]()
        let productSetName = [self.productSetId : true]

        self.product.map({ (drop: Drop) -> Void in
            productList[product.productKey] = true
        })

        if let userId = KeychainWrapper.standard.string(forKey: KEY_UID) {
            let downloads = ["product": productList, "productset": productSetName]
            DataService......blah, blah, blah...

        }
    }

    actionSheet.addAction(confirmPurchase)
    actionSheet.addAction(cancel)
}

在您的故事板中,控制点击视图控制器上方的黄色圆圈图标并拖动到目标视图控制器以创建一个转场。 Select segue 并给它一个标识符

现在您可以在您的第一个视图控制器中调用 performSegue(withIdentifier:sender:) 以编程方式继续。在你的情况下,输入

self.performSegue(withIdentifier: "yourCustomSegue", sender: nil) 

在您的行操作处理程序中就可以做到这一点。

以编程方式。

使用 UICollectionViewController 的子类创建一个文件 DownloadView,然后在您的操作中添加这些代码

let layout = UICollectionViewFlowLayout()
let controller = DownloadView.init(collectionViewLayout: layout)
self.navigationController?.pushViewController(controller, animated: true)

此外,如果您不需要 collectionView,请创建一个子类为 UIViewController 的文件,然后像这样推送它

self.navigationController?.pushViewController(DownloadView(), animated: true)

有故事板

添加 viewController 和标识符 down 并将这些代码写入操作处理程序

let downloadView = self.storyboard?.instantiateViewController(withIdentifier: "down") as! DownloadView
self.present(downloadView, animated:true, completion:nil)