如何在 SwiftUI 中创建可点击的 url/电话号码

nSq*_*uid 17 swiftui

我想在 SwiftUI 文本(或任何视图)中显示电话号码,然后使其可点击,以便打开“电话”。

有没有办法用 SwiftUI 来做到这一点,或者我应该尝试在 SwiftUI 中包装一个 UITextView 并用 NSAttributed 字符串等老式的方式来做?

我已阅读 SwiftUI 中的 Text 文档,但找不到有关如何执行此操作的任何信息。目前正在尝试在 Xcode 11 beta 5 中执行此操作。

我在 SwiftUI.h 的 SwiftUI API 中搜索了“文本”

我还搜索过 stackoverflow [swiftui] 和 google,其中包括“使电话号码/网址可点击”、“可点击链接/网址 swiftUI”等查询。

Text("123-456-7890")
    .onTapGesture {
    // do something here
}

Run Code Online (Sandbox Code Playgroud)

(文本将是日本电话号码)

小智 18

使用 iOS 14 / Xcode 12.0 beta 5

将 SwiftUI 中的新链接功能用于电话和电子邮件链接。

    // Link that will open Safari on iOS devices
    Link("Apple", destination: URL(string: "https://www.apple.com")!)
    
    //  Clickable telphone number
    Link("(800)555-1212", destination: URL(string: "tel:8005551212")!)

    //  Clickable Email Address
    Link("apple@me.com", destination: URL(string: "mailto:apple@me.com")!)
    
Run Code Online (Sandbox Code Playgroud)


Ash*_*ish 11

尝试这个,

let strNumber = "123-456-7890"

Button(action: {
    let tel = "tel://"
    let formattedString = tel + strNumber 
    guard let url = URL(string: formattedString) else { return }
    UIApplication.shared.open(url) 
   }) {
   Text("123-456-7890")
}
Run Code Online (Sandbox Code Playgroud)


nSq*_*uid 10

感谢 Ashish 的回答,我找到了解决这个问题所需的必要代码:

在按钮内部的操作中 - 您需要调用此方法:

UIApplication.shared.open(url)
Run Code Online (Sandbox Code Playgroud)

实际拨打电话/在 SwiftUI 视图中打开链接。

当然,一开始我不明白如何格式化我的电话号码,我在这些答案中找到了:

如何使用 openURL 在 Swift 中拨打电话?

不要忘记将“tel://”添加到字符串的开头/将其格式化为 URL..

工作的完整代码是

Button(action: {

    // validation of phone number not included
    let dash = CharacterSet(charactersIn: "-")

    let cleanString =     
    hotel.phoneNumber!.trimmingCharacters(in: dash)

    let tel = "tel://"
    var formattedString = tel + cleanString
    let url: NSURL = URL(string: formattedString)! as NSURL

    UIApplication.shared.open(url as URL)

}) {
Text(verbatim: hotel.phoneNumber!)
}
Run Code Online (Sandbox Code Playgroud)

  • 要使用 UIApplication,您需要导入 UIKit。有没有办法在没有 UIKit 的情况下打开外部网址? (2认同)

Ode*_*ner 8

吻 回复:

Button("url") {UIApplication.shared.open(URL(string: "https://google.com")!)}
Run Code Online (Sandbox Code Playgroud)


Riz*_*med 7

从 iOS 14 开始,Apple 默认为我们提供了一个链接视图。所以,你可以用这个,

Link("Anyone can learn Swift", destination: URL(string: "https://ohmyswift.com")!)
Run Code Online (Sandbox Code Playgroud)

对于之前的 iOS 版本,比如 iOS 13.0,你还是要使用

Button("Anyone can learn Swift") {
   UIApplication.shared.open(URL(string: "https://ohmyswift.com")!)
}
 
Run Code Online (Sandbox Code Playgroud)


ahe*_*eze 7

iOS 15(测试版)

利用 SwiftUI 中支持链接的 Markdown!

struct ContentView: View {
    var body: some View {
        Text("Call [123-456-7890](tel:1234567890)")
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

拨打 123-456-7890,号码以蓝色突出显示