我正在尝试将项目添加到数组,然后在表视图中显示它。 在我的情节提要中,我有一个表格视图,该表格视图可以很好地处理预加载的数据。 然后在下面,我添加了带有按钮和textField的容器视图,因此它出现在最后一个加载的单元格下面。
现在,我尝试将输入到文本字段中的文本作为单元格添加到表格视图中。我可以将其添加到存储所有“单元格数据”的数组中。这可行。但是,一旦在按钮操作中尝试“ tableView.reloadData()”,我的应用就会崩溃。
因此,由于它们都在同一View上,因此没有许多教程可以使用的viewWillAppear函数。我想要获得最佳的用户体验。
以Apples Reminders应用程序为例。在最后一行中,您可以编写一些文本,按回车键,它将被添加到表格视图中。
我已经检查了所有插座,因此它们已正确连接。 尝试将table.delegate = self添加到viewdidload()。然后,该应用程序在此行崩溃,并显示相同的错误。
寻找解决方案,找到遇到同样问题但仍未解决的人...
导入UIKit
ViewController类:UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var table: UITableView!
@IBOutlet weak var addItemBtnOutlet: UIButton!
@IBOutlet weak var addItemTextField: UITextField!
@IBAction func addItem(_ sender: Any) {
if let textFieldInput = addItemTextField.text {
//Fügt dem Items Array einen Wert hinzu, wenn das Textfeld nicht leer ist
items.addItem(text: textFieldInput)
print(textFieldInput)
//leert das Textfeld wieder (für weitere Eingaben)
addItemTextField.text = ""
//aktualisiert die TableView, damit das neu hinzugefügte Item dort sichtbar ist.
table.reloadData()
}
}
//temporary Tests
let items = Item()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//1
items.addItem(text: "Bananas")
//2
items.addItem(text: "Stawberries")
//3
items.addItem(text: "Bread")
//4
items.addItem(text: "Tomatos")
//5
items.addItem(text: "Shampoo")
//6
items.addItem(text: "Cheese")
//7
items.addItem(text: "Ham")
//8
items.addItem(text: "Fish")
//9
items.addItem(text: "Orange Juice")
//10
items.addItem(text: "Milk")
//Sets automaticDimension for rowheight (Optional)
//tableView.rowHeight = UITableView.automaticDimension
}
// Return the number of rows for the table.
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//returns number of items in Array
return items.itemArray.count
}
// Provide a cell object for each row.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let itemString = items.itemArray[indexPath.row]
// Fetch a cell of the appropriate type.
let cell = tableView.dequeueReusableCell(withIdentifier: "TextInputCell", for: indexPath) as! TextInputTableViewCell
// Configure the cell’s contents.
//cell.clipsToBounds = true
cell.configure(text: itemString, placeholder: "")
return cell
}
}
ITEM CLASS
导入基金会 导入UIKit
//临时物品的类别 类项目{
var itemArray = [String]()
//Appends a new Item to the Item Array
func addItem(text: String){
itemArray.append(text)
}
//removes the Item at Index X
func removeItem(index: Int){
itemArray.remove(at: index)
}
}
我希望在table.reloadData()之后,我的视图使用新添加的项再次加载所有单元格。
应用程序在table.reloadData()行崩溃,并显示错误消息: 线程1:致命错误:在隐式展开可选值时意外发现nil
也许这是因为容器视图创建了另一个ViewController?