重新加载和保存tableviews中的项目

时间:2016-02-06 21:15:20

标签: ios swift uitableview tableviewcell reloaddata

所以我创建了一个tableview,我添加(和删除)项目。我能够添加和删除tableView中的项目但是......有一些问题......

  1. 当我添加一个项目时,它不会显示在tableView中,直到我关闭模拟器,但是当我关闭并重新启动应用程序时,它会出现在tableView中。

  2. 当我向tableView添加另一个项目并关闭应用程序时,旧项目将被新添加的项目替换。因此,在将新项添加到tableView时自动删除旧项。

    当然,我想在关闭应用程序时保存现有项目,并且我想在现有的tableView项目之上添加新项目而无需关闭应用程序并重新启动...我不确定是什么问题用我的代码......?提前谢谢你!

  3. 的TableView

    import UIKit
    
    class PlaceTableVC : UITableViewController {
    
    var placeList = [String]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        if NSUserDefaults.standardUserDefaults().objectForKey("list")  != nil {
            placeList = NSUserDefaults.standardUserDefaults().objectForKey("list") as![String]
    
        }
    
        self.tableView.delegate = self
    
    
    }
    
    // MARK: - Table view data source
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    
        return 2
    }
    
    
    // Define number of different cells in the tableview
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if(section == 0) {
            return 1
        }
        else {
            return placeList.count
        }
    }
    
    
    // Define number of different cells in the tableview
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
        switch indexPath.section{
        case 0:
            let myProfile = tableView.dequeueReusableCellWithIdentifier("AddAPlaceButton") as! TableViewCell
    
            return myProfile
        default:
            let cell = tableView.dequeueReusableCellWithIdentifier("AddedPlaceCell") as! SecondTableViewCell
    
            cell.textLabel?.text = placeList[indexPath.row]
    
            return cell
        }  
    }
    
    
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    
        let section = indexPath.section
        if(section == 0) {
            return 60
        }
        else {
            return 60
        }
    }
    
    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
    {
        if editingStyle == UITableViewCellEditingStyle.Delete {
            placeList.removeAtIndex(indexPath.row)
            NSUserDefaults.standardUserDefaults().setObject(placeList, forKey: "list")
            tableView.reloadData()
        }
        func viewDidAppear(animated: Bool) {
            tableView.reloadData()  
        }
    }
    
    }  
    

    添加商品代码

    import UIKit
    
    var placeList = [String]()
    
    class AddAPlaceModalVC: UIViewController, UITextFieldDelegate {
    
    @IBOutlet var textField: UITextField!
    
    @IBAction func addItem(sender:AnyObject) {
        placeList.append(textField.text!)
        textField.text = ""
    
        NSUserDefaults.standardUserDefaults().setObject(placeList, forKey: "list")
    
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.textField.delegate = self
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }
    
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    
    }
    
    @IBAction func closeAddAPlaceVC(sender: AnyObject) {
        self.dismissViewControllerAnimated(true, completion: nil)
    
    } 
    }
    

1 个答案:

答案 0 :(得分:0)

在您的班级&#34; PlaceTable VC&#34;中,尝试使用此功能:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.tableView.reloadData()
}

此函数删除viewDidiAppear:

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
{
    if editingStyle == UITableViewCellEditingStyle.Delete {
        placeList.removeAtIndex(indexPath.row)
        NSUserDefaults.standardUserDefaults().setObject(placeList, forKey: "list")
        tableView.reloadData()
    }
}