目前我正在开发一个电子邮件应用程序,并希望通过我的应用程序打开所有带有mailto方案的链接,而不是默认的Apple的邮件应用程序。
例如,我有一个像这样的链接
<a href="mailto:email@example.com\>mailto_test</a>
UIWebView或UITextView中的(与哪一个无关,它们具有相似的行为)。
当我长按此链接时,iOS会向UIAlertController显示3个选项:
第一个选项&#34; New Message&#34;,将打开默认的Mail应用程序。所以我的问题是如何覆盖这种行为?如何强制此选项启动我自己的电子邮件应用程序?
对于那些认为不可能的人 - 请看一下iOS Gmail应用。 Gmail开发者已经实现了我所询问的内容,但我不明白这一点。
答案 0 :(得分:4)
在文本视图中,链接行为完全取决于您。为文本视图提供委托并实施textView(_:shouldInteractWith:in:interaction:)
。长按是.presentActions
互动。返回false
并替换您自己的回复。您可以设置自己的.actionSheet
警报,该警报看起来就像默认警报一样,但可以按照您的要求进行操作。
答案 1 :(得分:1)
解决方案是将邮件链接的默认点击操作更改为您想要的方式。
制作一个UITextView
示例:
假设我们有UITextView
textView,其attributeString
是
<a href="mailto:email@example.com\>mailto_test</a>
,其documentType
是html。代码如下:
let textView = UITextView(frame: view.bounds)
textView.frame.origin.y += 100
let attrStr = try! NSAttributedString(
data: "<a href=\"mailto:email@example.com\">mailto_test</a>".data(using: .utf8, allowLossyConversion: true)!,
options:[.documentType: NSAttributedString.DocumentType.html],
documentAttributes: nil)
textView.attributedText = attrStr
view.addSubview(textView)
这是默认效果,在屏幕中按下mailto_test
文本后,本机邮件应用程序功能被唤醒。因此,我们向delegate
添加textView
以修改点击操作。
textView.isEditable = false
textView.dataDetectorTypes = .link
textView.delegate = self
以下是控制特定点击操作的委托功能:
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
print(URL)
return false
}
每当您按下邮件链接时,调用的函数都不会调用本机邮件应用程序。而URL只是邮件网址。
答案 2 :(得分:0)
你正在寻找这样的东西,对吗?您可以从任何地方打开应用程序,点击电子邮件URL。
我现在无法找到确切答案,但您想将自己的应用添加为网址计划(Apple documentation)