获取要在我的UITableView中显示的辅助数据时出现问题。我有3件数据从API回来-名称,地址,电话。没有问题得到“姓名”显示,但当我试图显示次要数据(地址,电话)我卡住了。这里有两个代码文件,一个是处理TableView的ViewControllerFile,另一个是处理数据解析的Model文件。在我的代码中,次要数据被称为“detailedTextLabel”。任何帮助非常感谢!
第一个代码文件是ViewController -第二个是Model文件。
import UIKit
struct SportsItem {
let facility: String
let address: String
let telephone: String
}
class SportsResultsViewController: UIViewController, UITableViewDataSource {
var sportsData: [SportsItem] = []
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sportsData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifier", for: indexPath)
cell.textLabel?.text = sportsData[indexPath.row].facility
cell.detailTextLabel?.numberOfLines = 0
cell.detailTextLabel?.text = "Address: \(sportsData[indexPath.row].address)\nPhone: \(sportsData[indexPath.row].telephone)"
cell.textLabel?.font = UIFont.systemFont(ofSize: 8)
cell.detailTextLabel?.font = UIFont.systemFont(ofSize: 8)
return cell
}
var jsonString: String?
override func viewDidLoad() {
super.viewDidLoad()
resultsTableView.dataSource = self
resultsTableView.register(UITableViewCell.self, forCellReuseIdentifier: "CellIdentifier")
resultsTableView.cellLayoutMarginsFollowReadableWidth = true
resultsTableView.rowHeight = UITableView.automaticDimension
resultsTableView.estimatedRowHeight = 164.0
if let jsonString = jsonString {
if let data = jsonString.data(using: .utf8),
let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any],
let features = json["features"] as? [[String: Any]] {
var sportsData: [SportsItem] = []
for i in 0..<min(10, features.count) {
if let feature = features[i]["properties"] as? [String: Any]? ?? [:],
let address = feature["Address"] as? String,
let telephone = feature["Telephone"] as? String,
let facility = feature["Facility Name"] as? String {
let sportsItem = SportsItem(facility: facility, address: address, telephone: telephone)
sportsData.append(sportsItem)
}
}
self.sportsData = sportsData
if sportsData.isEmpty {
// Handle empty data case if needed
}
resultsTableView.reloadData()
}
}
}
@IBAction func findHotelsPressed(_ sender: UIButton) {
UIApplication.shared.open(URL(string: "https://www.hotels.com/de606379/hotels-hong-kong-hong-kong-sar/")!)
}
@IBOutlet weak var resultsTableView: UITableView!
}
第二个代码文件(数据模型文件)...
import UIKit
struct SportsManager {
let sportsURL = "https://geodata.gov.hk/gs/api/v1.0.0/geoDataQuery?q=%7Bv%3A%221%2E0%2E0%22%2Cid%3A%22d1a2e8e0-8636-41e9-b664-0e64b86860a2%22%2Clang%3A%22ALL%22%7D"
func getSportsData(completion: @escaping (String?) -> Void) {
guard let url = URL(string: sportsURL) else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error.localizedDescription)
completion(nil)
return
}
guard let data = data else {
completion(nil)
return
}
do {
let jsonData = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
let jsonString = try JSONSerialization.data(withJSONObject: jsonData ?? "", options: .prettyPrinted)
let sportsData = String(data: jsonString, encoding: .utf8)
completion(sportsData)
} catch let error {
print(error.localizedDescription)
completion(nil)
}
}.resume()
}
}
地址行未出现在表格单元格中:
1条答案
按热度按时间dm7nw8vv1#
问题是,单元格的
detailTextLabel
仅在单元格使用.default
以外的样式创建时才有效。在本例中,您希望使用.subtitle
样式创建单元格。你有两个可能的解决方案。一个是修复你的代码,另一个是正确地更新你的故事板。
仅代码:
1.删除线路:
1.替换行:
与线:
就是这样。现在您应该可以在每个单元格中看到两行文本。
故事板:
既然您已经在故事板中创建了表格视图(基于它是一个插座),那么您确实应该在故事板中完成所有表格和单元格的设置。通过故事板和outlet添加表视图没有什么意义,但可以使用代码进行设置。在情节提要中连接表的数据源和代理出口。在情节提要中设置原型单元格。在本例中,将单元格的Style设置为“Subtitle”,并将Identifier设置为“CellIdentifier”。
另外请注意,自iOS 14以来,使用
textLabel
和detailTextLabel
的旧样式表格单元格设置已被弃用。除非您需要支持iOS 13,否则您应该使用所需的内容创建自己的自定义单元格,或者使用新的内容配置API。