返回

打开 URL 的若干方法

IOS

SwiftUI 中打开 URL 的方法

在 SwiftUI 中,打开 URL 的最简单方法是使用标准按钮。以下代码演示了如何在按钮点击时打开一个 URL:

struct ContentView: View {
  var body: some View {
    Button(action: {
      let url = URL(string: "https://www.apple.com")!
      UIApplication.shared.open(url)
    }) {
      Text("Open Apple Website")
    }
  }
}

您还可以使用文本链接来打开 URL。以下代码演示了如何创建一个文本链接:

struct ContentView: View {
  var body: some View {
    Link(destination: URL(string: "https://www.apple.com")!) {
      Text("Open Apple Website")
    }
  }
}

文本链接与标准按钮类似,但它们更适合用于文本中的 URL。

您还可以使用图像链接来打开 URL。以下代码演示了如何创建一个图像链接:

struct ContentView: View {
  var body: some View {
    Image(systemName: "globe")
      .onTapGesture {
        let url = URL(string: "https://www.apple.com")!
        UIApplication.shared.open(url)
      }
  }
}

图像链接与标准按钮和文本链接类似,但它们更适合用于图像中的 URL。

自动识别文本中的 URL

您还可以使用 SwiftUI 的 @State 属性自动识别文本中的 URL。以下代码演示了如何做到这一点:

struct ContentView: View {
  @State private var url: URL?

  var body: some View {
    Text("This is a sample text with a URL: https://www.apple.com")
      .onTapGesture {
        url = URL(string: "https://www.apple.com")!
      }
      .onOpenURL(perform: { url in
        self.url = url
      })
  }
}

当用户点击文本中的 URL 时,@State 属性 url 将被更新为该 URL。您可以在视图中使用 url 属性来打开 URL。

自定义打开 URL 前后的行为

您还可以自定义打开 URL 前后的行为。以下代码演示了如何在打开 URL 之前显示一个确认对话框:

struct ContentView: View {
  var body: some View {
    Button(action: {
      let url = URL(string: "https://www.apple.com")!

      let alert = UIAlertController(title: "Open URL", message: "Are you sure you want to open this URL?", preferredStyle: .alert)
      alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
      alert.addAction(UIAlertAction(title: "Open", style: .default, handler: { _ in
        UIApplication.shared.open(url)
      }))
      present(alert, animated: true)
    }) {
      Text("Open Apple Website")
    }
  }
}

当用户点击按钮时,将显示一个确认对话框。用户可以点击“取消”按钮取消打开 URL,也可以点击“打开”按钮打开 URL。

总结

在本文中,我们介绍了在 SwiftUI 视图中打开 URL 的若干种方法。我们还探讨了如何自动识别文本中的内容并将其转换为可点击链接,以及如何自定义打开 URL 前后的行为。希望这些信息对您有所帮助。