数组附加

时间:2016-02-25 06:39:43

标签: ios arrays swift

我试图将文本字段中的用户输入添加到数组中,以便我可以在表视图上显示这些输入,但遗憾的是我没有从文本字段中获取正确的数据到数组中。我不想使用两个视图控制器,我认为可以使用一个嵌入了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)

}

}

2 个答案:

答案 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()

}

在数组中添加值后,表仍然具有旧值,您需要重新生成表,以便它可以获取在数组中添加的新值。