Как я могу обработать нажатие кнопки отмены, когда пользователю предлагается открыть другое приложение - PullRequest
1 голос
/ 16 апреля 2019

У меня есть требование открыть твит в моем приложении, если у пользователя установлен твиттер, открыть в твиттере, в противном случае представить веб-просмотр и отобразить твит.

Я могу добиться этого по существу с помощью нижеприведенного. Это работает, и я доволен этим.

Однако, когда изначально будет предложено открыть в Twitter, если пользователь нажмет кнопку «Отмена», я бы вместо этого хотел представить веб-просмотр. Однако в настоящее время, если пользователь нажимает кнопку «Отмена», ничего не происходит, и ему нужно снова нажать на элемент твита в его ленте.

Возможно ли иметь запасной вариант, если пользователь нажмет кнопку "Отмена" в сообщении?

   func didSelectItemInFeed(_ selected: FeedItem) {
        switch selected.item.type {
        case .companyNews:
           ....
        case .tweet:
            guard
                let username = selected.item.tweet?.displayName,
                let appURL = URL(string: "twitter://status?id=\(selected.item.externalId)"),
                let webURL = URL(string: "https://twitter.com/\(username)/status/\(selected.item.externalId)")
                else { return }

            let application = UIApplication.shared

            if application.canOpenURL(appURL as URL) {
                application.open(appURL as URL)
            } else {
                presentWebView(webURL)
            }
        default:
            break
        }
    }

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Завершите свою функцию: application.open(appURL as URL, completionHandler: {isSuccess in})()

    func didSelectItemInFeed(_ selected: FeedItem) {
        switch selected.item.type {
        case .companyNews:
            ....
        case .tweet:
            guard
                let username = selected.item.tweet?.displayName,
                let appURL = URL(string: "twitter://status?id=\(selected.item.externalId)"),
                let webURL = URL(string: "https://twitter.com/\(username)/status/\(selected.item.externalId)")
                else { return }

            let application = UIApplication.shared

            if application.canOpenURL(appURL as URL) {
                application.open(appURL as URL, completionHandler: { isSuccess in
                    // print here does your handler open/close : check 'isSuccess'
                })()
            } else {
                presentWebView(webURL)
            }
        default:
            break
        }
    }
0 голосов
/ 16 апреля 2019

application.open имеет дополнительный обработчик завершения:

application.open(appURL) { (success) in
   print("Success \(success)")
}

Вы должны проверить статус успеха.

...