当前正在开发一个应用程序,该应用程序具有现有数组(在单独的.swift文件中)的所有项目的列表。这是通过tableView完成的。但是,每次我只会得到一个空的tableview。知道出什么问题了吗?
import UIKit
import MapKit
//Initialize the TableViewController
class CategoriesController: UIViewController, UITableViewDataSource, UITableViewDelegate {
//Retrieve the array
var locationsAll = [Location]()
//Outlet
@IBOutlet var tableView: UITableView!
//Load view
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return locationsAll.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "allCell") ?? UITableViewCell(style: .subtitle, reuseIdentifier: "allCell")
let location = locationsAll[indexPath.row]
cell.textLabel?.text = location.title
cell.detailTextLabel?.text = location.rating
return cell
}
}
对于数组,我使用了一个结构。该结构也会在MKMapView上调用。
struct Location {
let title: String
let rating: String
let description: String
let latitude: Double
let longitude: Double
}
包含结构和数据的.swift文件:
struct Location {
let title: String
let rating: String
let description: String
let latitude: Double
let longitude: Double
}
let locations = [
Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111)
]
我使用var locationsAll = [Location]()
在文件中称呼它
预先谢谢你!
答案 0 :(得分:1)
那么你需要
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return locations.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "allCell") ?? UITableViewCell(style: .subtitle, reuseIdentifier: "allCell")
let location = locations[indexPath.row]
cell.textLabel?.text = location.title
cell.detailTextLabel?.text = location.rating
return cell
}
}
let locations = [
似乎是全局变量,因此可以在任何地方访问,也可以声明
var locationsAll = [Location]()
然后在viewDidLoad
locationsAll = locations
答案 1 :(得分:1)
不建议使用全局数组作为数据源。数据应该封装在结构,类或枚举中。
您可以在控制器内部创建位置。
替换
var locationsAll = [Location]()
使用
var locationsAll = [
Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111)
]
或在结构中将位置声明为 static 变量
struct Location {
let title: String
let rating: String
let description: String
let latitude: Double
let longitude: Double
static let locations = [
Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111)
]
}
并填充数据源数组
var locationsAll = Location.locations
答案 2 :(得分:0)
计数将等于0。这就是为什么不渲染任何单元格的原因。添加数据后,您需要在表视图上使用relodData。
我假设您在情节提要中设置了单元?否则,您需要在使用之前注册该单元格。