2017-10-10 75 views
4

目前我正在開發一個電子郵件應用程序,並希望通過我的應用程序打開所有帶有mailto方案的鏈接,而不是默認的Apple Mail應用程序。覆蓋或自定義默認的「longpress mailto:」行爲

舉例來說,我有這樣一個

<a href="mailto:[email protected]\>mailto_test</a> 
在UIWebView中或UITextView的(無所謂哪一個,他們也有類似的行爲)

的鏈接。

當我長按該鏈接的iOS會顯示UIAlertController有3個選項:

enter image description here

第一個選項,「新郵件」,會打開默認的郵件應用程序。所以我的問題是如何覆蓋這種行爲?我如何強制這個選項啓動我自己的電子郵件應用程序?

對於那些認爲這是不可能的 - 看看iOS的Gmail應用程序。 Gmail開發者已經實現了我所問的內容,但我不明白。

+1

UIWebView中已被棄用。你應該使用WKWebView。 – matt

+0

@matt我想知道它是如何改變任何事情的,它是如何與我的問題相關的 – user1248568

+0

你發現答案是什麼嗎?現在我真的很好奇 –

回答

4

在文本視圖中,鏈接行爲完全取決於您。給文本視圖委託並實現textView(_:shouldInteractWith:in:interaction:)。長按是.presentActions互動。返回false並替換您自己的回覆。你可以建立你自己的.actionSheet警報,看起來就像默認的警報,但做你想要的。

1

解決方案是將郵件鏈接的默認點擊操作更改爲您想要的方式。

做一個UITextView例如:

假設我們有UITextView TextView的,其attributeString

<a href="mailto:[email protected]\>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 protected]\">mailto_test</a>".data(using: .utf8, allowLossyConversion: true)!, 
    options:[.documentType: NSAttributedString.DocumentType.html], 
    documentAttributes: nil) 

textView.attributedText = attrStr 
view.addSubview(textView) 

這是壓在屏幕的機郵件應用程序功能喚醒了mailto_test文本後的默認效果。所以我們添加一個delegatetextView來修改點擊動作。

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只是郵件的URL。

0

您正在尋找類似的東西,對吧?您可以在任何地方點擊電子郵件網址來打開您的應用程序。

enter image description here

我無法找到確切的答案,現在,但你想你的應用程序添加爲URL方案(Apple documentation

編輯:more apple documentation