如何在 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
}
}
这个问题我找不到答案,但在朋友的帮助下终于弄明白了(我在这个帖子的下方给出了正确答案)。
我想创建一个基于 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
}
}