如何在SwiftUI中创建可点击的url/电话号码
我想在SwiftUI文本(或任何视图)中显示一个电话号码,然后使其可单击,这样它将打开“电话” 有没有一种方法可以用SwiftUI实现这一点,或者我应该尝试用SwiftUI包装UITextView,并用NSAttribute字符串等老式方法实现这一点 我已经阅读了SwiftUI中的文本文档,但找不到任何关于如何执行此操作的信息。目前正在Xcode 11 beta 5中尝试这样做 我在SwiftUI.h中搜索了swiftuiapi中的“text” 我还搜索了stackoverflow[swiftui]和google,搜索内容包括“使电话号码/url可点击”、“可点击链接/url swiftui”等如何在SwiftUI中创建可点击的url/电话号码,swiftui,Swiftui,我想在SwiftUI文本(或任何视图)中显示一个电话号码,然后使其可单击,这样它将打开“电话” 有没有一种方法可以用SwiftUI实现这一点,或者我应该尝试用SwiftUI包装UITextView,并用NSAttribute字符串等老式方法实现这一点 我已经阅读了SwiftUI中的文本文档,但找不到任何关于如何执行此操作的信息。目前正在Xcode 11 beta 5中尝试这样做 我在SwiftUI.h中搜索了swiftuiapi中的“text” 我还搜索了stackoverflow[swiftu
Text(“123-456-7890”)
.ontapsigne{
//在这里做点什么
}
(文本将是日文电话号码)将其设置为带有动作的按钮()
,而不是带有手势的文本()
。试试这个
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")
}
感谢Ashish的回答,我找到了解决此问题所需的必要代码: 在按钮内部的操作中-您需要调用此方法:
UIApplication.shared.open(url)
在SwiftUI视图中实际拨打电话/打开链接
当然,一开始我不知道如何格式化我的电话号码,我在这些答案中发现:
别忘了在字符串开头添加“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!)
}
接吻回答:
Button("url") {UIApplication.shared.open(URL(string: "https://google.com")!)}
在iOS 14中,苹果默认为我们提供了一个链接视图。所以,你可以用这个
Link("Anyone can learn Swift", destination: URL(string: "https://ohmyswift.com")!)
对于iOS的早期版本,如iOS 13.0,您仍然必须使用
Button("Anyone can learn Swift") {
UIApplication.shared.open(URL(string: "https://ohmyswift.com")!)
}
使用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")!)
使用iOS 14/Xcode 12.5
如果您想使用视图,我会添加此选项 通过点击视图拨打电话 通过轻敲字符串来打电话
按钮{
var cleanNum=selectedItem.phoneNum
让charsToRemove:Set=[“”,“(“,”),“-”]/“+”可以保留
cleanNum.removeAll(其中:{charsToRemove.contains($0)})
guard let phoneURL=URL(字符串:“tel://\(cleanNum)”)else{return}
UIApplication.shared.open(phoneURL,选项:[:],completionHandler:nil)
}标签:{
// ...
}
iOS 15(测试版)
利用SwiftUI中的降价功能,它支持链接
struct ContentView: View {
var body: some View {
Text("Call [123-456-7890](tel:1234567890)")
}
}
结果:
我更新了我的问题。这是一个很好的开始,你的回答让我自己弄清楚了,但它没有包括我需要的重要信息。有没有一种方法可以在不占用整个屏幕的情况下调用UIKit来使用你需要导入的UIKit应用程序。有没有一种方法可以在没有UIKit的情况下打开外部url?这段代码至少可以在没有任何“import UIKit”语句的情况下运行。如果要在没有适当事实支持的情况下创建一个语句,我想知道你为什么会这样建议。我并不是说这不是一个有效的答案,但我有一个带有轻触手势的文本字段,我的文本字段可以正常工作。有没有办法像contacts应用程序那样使用链接?i、 e.当你长按电话号码或地址时,它会主动为你复制它?耶,iOS 14!这很有效。有文本消息链接选项吗?找到了我问题的答案:链接(“(123)555-1212”,目的地:URL(字符串:“imessage:1235551212”)!)
Link("1234567890", destination: URL(string: "tel:1234567890")!)
Button {
var cleanNum = selectedItem.phoneNum
let charsToRemove: Set<Character> = [" ", "(", ")", "-"] // "+" can stay
cleanNum.removeAll(where: { charsToRemove.contains($0) })
guard let phoneURL = URL(string: "tel://\(cleanNum)") else { return }
UIApplication.shared.open(phoneURL, options: [:], completionHandler: nil)
} label: {
// ...
}
struct ContentView: View {
var body: some View {
Text("Call [123-456-7890](tel:1234567890)")
}
}