无法用名称填充tableview
我需要填充我的tableview只是名称的类别。 当我填充tableview它显示这个…
Category(name: "Sandwiches & Burgers", items: [])
在哪里我追加我的所有信息…
let sortedKeys = newArray.sorted{$0.0 < $1.0} let shake = Item(name: "Shake", carbs: 20) let fries = Item(name: "Fries", carbs: 30) let beverages = Category(name: "Beverages", items: [shake]) let chips_fries = Category(name: "Chips & Fries", items: [fries]) let desserts = Category(name: "Desserts", items: []) let other = Category(name: "Other Menu Items", items: []) let sandwiches_burgers = Category(name: "Sandwiches & Burgers", items: []) let sides = Category(name: "Sides", items: []) a_w = Restaurant(name: "A&W", categories: [beverages, chips_fries, desserts, other, sandwiches_burgers, sides]) menuArray = [a_w]
然后我的class
struct Item { let name: String let carbs: Int } struct Category { let name: String let items: [Item] } struct Restaurant { let name: String let categories: [Category] }
这里是我填充的地方…
var currentRestaurant:Restaurant! var menuArray:[Restaurant] = [] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var array = currentRestaurant.categories print(array) let currentCell = tableView.dequeueReusableCell(withIdentifier: "cell")! currentCell.textLabel?.text = String(describing: array[indexPath.item]) return currentCell } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return currentRestaurant.categories.count }
看看你的数据源cellForRowAt
应该是:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) let category = currentRestaurant.categories[indexPath.row] cell.textLabel!.text = category.name return cell }
但在重新加载表视图之前,您必须将currentRestaurant
设置为menuArray[0]
实际上,处理这种数据源的通常方式是分段显示餐馆。
请将数据源数组声明为比menuArray
更具描述性的名称
var restaurants = [Restaurant]()
然后返回numberOfSections中的餐馆数量
override func numberOfSections(in tableView: UITableView) -> Int { return restaurants.count }
和numberOfRowsInSection
的类别数目
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { let restaurant = restaurants[section] return restaurant.categories.count }
和cellForRow
是
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) let restaurant = restaurants[indexPath.section] let category = restaurant.categories[indexPath.row] cell.textLabel!.text = category.name return cell }
用这种方法你根本不需要currentRestaurant
。
在viewDidLoad
填充数据源数组并重新加载表视图
override func viewDidLoad() { super.viewDidLoad() let shake = Item(name: "Shake", carbs: 20) let fries = Item(name: "Fries", carbs: 30) let beverages = Category(name: "Beverages", items: [shake]) let chips_fries = Category(name: "Chips & Fries", items: [fries]) let desserts = Category(name: "Desserts", items: []) let other = Category(name: "Other Menu Items", items: []) let sandwiches_burgers = Category(name: "Sandwiches & Burgers", items: []) let sides = Category(name: "Sides", items: []) restaurants = [Restaurant(name: "A&W", categories: [beverages, chips_fries, desserts, other, sandwiches_burgers, sides])] tableView.reloadData() }