如何在 SwiftUI 中使用可点击的 URL 在内容视图中创建列表?

How to create a list in Content View with clickable URLs in SwiftUI?

这个问题我找不到答案,但在朋友的帮助下终于弄明白了(我在这个帖子的下方给出了正确答案)。

我想创建一个基于 JSON 我从 GitHub 网站下载的列表,但我找不到如何使列表项可点击,以便用户可以点击查看他们正在搜索的存储库。

请注意,这个问题是关于 SwiftUI 的,而不是 iOS 编程的故事板方法!

答案是使用 WebView。主要代码:

import SwiftUI

struct ContentView: View {
    @StateObject private var viewModel = ContentViewModel()
    
    var body: some View {

HStack {
                    TextField("Enter search", text: $viewModel.query)
                    Button("Search") {
                        viewModel.fetchRepos()
                    }
                }
                List(viewModel.searchResults, id: \.id) { item in
                    VStack(alignment: .leading) {
/* the lines answering to the query start from the Link command and follow until the end */ 
                        Link(destination: URL(string: item.htmlUrl)!, label: {
                            Text(item.fullName)
                                .font(.headline)
                                .foregroundColor(.blue)
                        })
                    }
                }
}

我评论了答案的开头。为了更好地理解代码,这些是 API 键:

import SwiftUI

struct Root: Codable {
    let items: [Item]

    enum CodingKeys: String, CodingKey {
        case items
    }
}

struct Item: Identifiable, Codable {
    let id: Int
    let htmlUrl: String
    let fullName: String

    enum CodingKeys: String, CodingKey {
        case id
        case htmlUrl = "html_url"
        case fullName = "full_name"
    }
}

创建可让您的用户转到相应 URL 的可点击列表很有趣:)

P.S。 在这个答案中,缺少 URLSession、JSONDecoder 和查询处理部分,但它们会使它复杂化并且对这个问题并不重要。您可以在不同主题的 Stack Overflow 上研究它们 :)

Clickable ListView请使用UITableView。

class MyViewController: UIViewController {

      override func viewDidLoad() {
           tableView.delegate = self
           tableView.dataSource = self
      }
}