#ios #swift #uiapplication
#iOS #swift #uiapplication
Вопрос:
У меня есть требование открыть твит в моем приложении, если у пользователя установлен Twitter, откройте в Twitter, в противном случае представьте веб-просмотр и отобразите твит.
Я могу добиться этого по существу с помощью приведенного ниже. Это работает, и я доволен этим.
Однако при первоначальном запросе на открытие в Twitter, если пользователь нажмет «Отмена», я бы хотел вместо этого представить webview. Однако в настоящее время, если пользователь нажимает «Отмена», ничего не происходит, и им нужно снова нажать на элемент твита в ленте.
Возможно ли иметь запасной вариант, если пользователь нажмет «Отмена» в сообщении?
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
}
}
Ответ №1:
Завершите свою функцию с помощью: 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
}
}
Ответ №2:
приложение.open имеет дополнительный обработчик завершения:
application.open(appURL) { (success) in
print("Success (success)")
}
Вы должны проверить статус успеха.