Как добавить второе действие (переход) в действие UIAlertAction?

Пожалуйста, извините меня, я относительно новичок в кодировании ios:

Я реализовал лист действий с кнопками «Отмена» и «Купить». Действие кнопки «Купить» выполняется успешно, без проблем.

Но я хочу добавить еще одно (второе) действие, которое позволяет пользователю автоматически переходить на другой экран после вызова исходного (1-го) действия.

Упрощенный: я хочу нажать кнопку «Купить» (в моем листе действий), которая загружает продукт, а затем хочу автоматически перейти на экран загрузки, чтобы увидеть мои новые загрузки.

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)
}

person Jamakes    schedule 27.03.2019    source источник
comment
Просто вставьте строку для перехода после завершения процесса загрузки или, возможно, в обработчике завершения, если таковой имеется.   -  person Krunal Nagvadia    schedule 27.03.2019


Ответы (2)


С программно.

Создайте файл DownloadView с подклассом UICollectionViewController, затем в своем действии добавьте этот код

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)
person Picker    schedule 27.03.2019
comment
Спасибо Пикер! Я использовал 3-й вариант (с раскадровкой), работает хорошо! - person Jamakes; 28.03.2019
comment
Yourwellcom, пожалуйста, проверьте правильный ответ, чтобы другие могли легко его найти - person Picker; 28.03.2019
comment
Привет, сборщик, я только что заметил, что, хотя код работает и показывает правильный экран, он не меняется и не подсвечивает значок UITabBar / элемент экрана, к которому я перешел, как мне изменить выбранный значок TabBar? Код: пусть myProductsView = self.storyboard?.instantiateViewController(withIdentifier: MyProductsVC) as! MyProductsVC self.navigationController?.pushViewController (myProductsView, анимированный: false) - person Jamakes; 29.03.2019
comment
В rootViewController должен быть навигационный контроллер, раскадровка щелкает по первому экрану --›edit--›embedin--›navigationController - person Picker; 29.03.2019

В раскадровке щелкните значок желтого круга над контроллером представления и перетащите его к целевому контроллеру представления, чтобы создать переход. Создать переход Выберите переход и присвойте ему идентификатор Укажите идентификатор перехода

Теперь вы можете вызвать performSegue(withIdentifier:sender:) в своем первом контроллере представления для программного перехода. В вашем случае поставьте

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

в вашем обработчике действий строки добьется цели.

person Ricky Mo    schedule 27.03.2019
comment
Спасибо, я очень благодарен Рикки, но я знаю, как создавать переходы с идентификаторами, я просто не знал, куда поместить код и нужно ли мне какое-то объявление. С тех пор я понял это с помощью ответа @KrunalNagvadia. Спасибо, парни! Вот дополнительный вопрос: нужно ли мне создавать новый переход, если экран, на который я собираюсь перейти, является частью UITabBarController? Могу ли я просто сделать переход через UITabBarController? еще раз, пожалуйста, обратите внимание, я не продвинут в кодировании, поэтому мои вопросы могут быть немного низкоуровневыми. - person Jamakes; 27.03.2019
comment
Вы можете перейти к UITabBarController, передать информацию о том, какую вкладку вы хотите выбрать, через prepare(for:sender:), затем выбрать нужную вкладку в viewDidLoad из UITabBarController, изменив selectedIndex. - person Ricky Mo; 27.03.2019
comment
Хорошо, спасибо, Рикки, сегодня попробую разобраться. - person Jamakes; 27.03.2019
comment
Привет, @Ricky, я вынужден повышать свои навыки в Swift, и я ищу репетитора примерно на два часа в неделю. Это то, что вы делаете или рассматриваете? Спасибо - person Jamakes; 29.03.2019
comment
@Jamakes Нет, я не репетитор :-) - person Ricky Mo; 29.03.2019