我试图将文本字段中的用户输入添加到数组中,以便我可以在表视图上显示这些输入,但遗憾的是我没有从文本字段中获取正确的数据到数组中。我不想使用两个视图控制器,我认为可以使用一个嵌入了tableview的视图控制器来实现它,就像我在代码中看到的那样。我是Swift的新手。我该如何解决?
import UIKit
class ViewController: UIViewController,UITableViewDelegate , UITableViewDataSource{
var Dataceiver : [Data] = []
var todoItem: Data = Data(tasksName: "")
@IBOutlet var taksTextField: UITextField!
@IBOutlet var tasksTableview: UITableView!
@IBOutlet var taskButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
loadInitialData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func loadInitialData() {
Dataceiver = [
Data(tasksName: "Go to the dentist"),
Data(tasksName: "Fetch groceries"),
Data(tasksName: "Sleep")
]
}
@IBAction func tasksButtonTapped(sender: UIButton) {
self.todoItem = Data(tasksName: self.taksTextField.text!)
self.Dataceiver.append(todoItem)
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return Dataceiver.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let tempCell = tableView.dequeueReusableCellWithIdentifier("ListPrototypeCell")! as UITableViewCell
let todoItem2 = Dataceiver[indexPath.row]
// Downcast from UILabel? to UILabel
let cell = tempCell.textLabel as UILabel!
cell.text = todoItem2.tasksName
//check if complete for the check mark
if (todoItem2.complete) {
tempCell.accessoryType = UITableViewCellAccessoryType.Checkmark;
} else {
tempCell.accessoryType = UITableViewCellAccessoryType.None;
}
return tempCell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: false)
let tappedItem = Dataceiver[indexPath.row] as Data
tappedItem.complete = !tappedItem.complete
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
}
}
答案 0 :(得分:0)
在tableView.reloadData()
之后调用loadInitialData()
来刷新tableView。
为什么需要在UITableView中调用reloadData():
UITableView会覆盖UIView的layoutSubviews方法 只有在创建UITableView或的新实例时才调用reloadData 分配新数据源时。重新加载表视图会清除 当前状态,包括当前选择。但是,如果你 显式调用reloadData,它清除此状态和任何后续状态 对layoutSubviews的直接或间接调用不会触发重新加载。
请参阅Apple Docs
答案 1 :(得分:0)
tasksButtonTapped()
中的您需要在self.Dataceiver.append(todoItem)
@IBAction func tasksButtonTapped(sender: UIButton) {
self.todoItem = Data(tasksName: self.taksTextField.text!)
self.Dataceiver.append(todoItem)
self.tasksTableview.reloadData()
}
在数组中添加值后,表仍然具有旧值,您需要重新生成表,以便它可以获取在数组中添加的新值。