我的TableView只列出了itemArray中的最后一项?
我的 itemArray 中有四个项目,但我的 TableView 只列出了我最后一个附加的项目,它首先列出了它。但是,我可以选中和取消选中实际包含文本的第一行下方的三行。
import UIKit
class ToDoListViewController: UITableViewController {
var itemArray = [Item]()
let defaults = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
let newItem = Item()
newItem.title = "Find Mike"
itemArray.append(newItem)
let newItem2 = Item()
newItem.title = "Buy Eggos"
itemArray.append(newItem2)
let newItem3 = Item()
newItem.title = "Destroy Demongorgon"
itemArray.append(newItem3)
let newItem4 = Item()
newItem.title = "RockOn!"
itemArray.append(newItem4)
// if let items = defaults.array(forKey: "ToDoListArray") as? [String] {
// itemArray = items
// }
}
//MARK: - TableView Datasource Methods
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return itemArray.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ToDoItemCell", for: indexPath)
let item = itemArray[indexPath.row]
cell.textLabel?.text = item.title
cell.accessoryType = item.done ? .checkmark : .none
return cell
}
//MARK: - TableView Delegate Methods
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//print(itemArray[indexPath.row])
itemArray[indexPath.row].done = !itemArray[indexPath.row].done
tableView.reloadData()
tableView.deselectRow(at: indexPath, animated: true)
}
//MARK: - Add New Items
@IBAction func addButtonPressed(_ sender: UIBarButtonItem) {
var textField = UITextField()
let alert = UIAlertController(title: "Add New Todoey Item", message: "", preferredStyle: .alert)
let action = UIAlertAction(title: "Add Item", style: .default) { (action) in
//what will happen once the user clicks the add item
let newItem = Item()
newItem.title = textField.text!
self.itemArray.append(newItem)
self.defaults.set(self.itemArray, forKey: "ToDoListArray")
self.tableView.reloadData()
}
alert.addTextField { (alertTextField) in
alertTextField.placeholder = "Create new item"
textField = alertTextField
}
alert.addAction(action)
present(alert, animated: true, completion: nil)
}
}
StackOverflow 说我需要更多描述……我认为这说明了一切……这是针对 Udemy iOS 系列的……
回答
您使用了相同的实例来设置项目名称。更改您的 viewDidLoad 方法。
override func viewDidLoad() {
super.viewDidLoad()
let newItem = Item()
newItem.title = "Find Mike"
itemArray.append(newItem)
let newItem2 = Item()
newItem2.title = "Buy Eggos"
itemArray.append(newItem2)
let newItem3 = Item()
newItem3.title = "Destroy Demongorgon"
itemArray.append(newItem3)
let newItem4 = Item()
newItem4.title = "RockOn!"
itemArray.append(newItem4)
// if let items = defaults.array(forKey: "ToDoListArray") as? [String] {
// itemArray = items
// }
}