【问题标题】:Swift NSUserDefaults TableView multiple cellsSwift NSUserDefaults TableView 多个单元格
【发布时间】:2015-09-01 13:24:48
【问题描述】:

当我们在 textField 中键入内容并按下按钮时,它会将 textField 的内容保存到 Nsuserdefaults 中。在其他视图控制器中,TableView 读取 NSUserDefaults 并仅显示一个单元格。当我们返回第一个 ViewController 并在 textField 中键入其他内容并再次按下按钮时,我们只会再次获得 tableVIew 中的一个单元格。当我们在 textField 中输入内容时,tableView 如何显示多个单元格?

ViewController.swift

class ViewController: UIViewController {  
    @IBOutlet weak var textField: UITextField!
    var defaults = NSUserDefaults.standardUserDefaults()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

   @IBAction func add2(sender: UIButton) {
       var connection = self.textField.text
       defaults.setObject(connection, forKey: "text")
    }
}

ViewController2.swift

class ViewController2: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    var defaults = NSUserDefaults.standardUserDefaults()

    var ourText = String()

    var textArray:[String] = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        self.tableView.delegate = self
        self.tableView.dataSource = self

        ourText = defaults.stringForKey("text")!
        textArray.append(ourText)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {    
        return textArray.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {        
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel?.text = textArray[indexPath.row]

        return cell    
     }
 }

【问题讨论】:

    标签: ios swift tableview


    【解决方案1】:
    class ViewController: UIViewController {
        @IBOutlet weak var textField: UITextField!
        var array:NSMutableArray = NSMutableArray();//create array if you are playing between the two view controllers
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    
    @IBAction func add2(sender: UIButton) {
    
        var connection = self.textField.text
        var dataDic:NSMutableDictionary = NSMutableDictionary();
        dataDic.setObject(self.textField.text, forKey: "your key");
        // add object in array
        array.addObject(dataDic);
    
        //push your array like
    
        var viewController2Obj = ViewController2(nibName: "ViewController2", bundle: nil);
        viewController2Obj.arrayText = array;
        self.navigationController?.pushViewController(viewController2Obj, animated: true);
        }
    
    }
    

    ViewController2

    class ViewController2: UIViewController, UITableViewDelegate,  UITableViewDataSource {
    
        @IBOutlet weak var tableView: UITableView!
    
        var arrayText:NSMutableArray!;
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
    // Do any additional setup after loading the view.
    
        self.tableView.delegate = self
        self.tableView.dataSource = self
    
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) ->  Int {
    
        return arrayText.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath:  NSIndexPath) -> UITableViewCell {
    
         let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
         let dataDic = arrayText[indexPath.row] as NSMutableDictionary
         cell.textLabel?.text = dataDic.valueforkey("your key") as String;
         return cell
    
    }
    
    
    }
    

    【讨论】:

      【解决方案2】:

      那是因为您每次都存储一个值并覆盖它,所以您应该使用数组并在每次添加时附加该值。

      这对你来说应该没问题,在你的 ViewController 中定义数组,然后用它来存储你的数据。

       array.append(connection)
       NSUserDefaults.standardUserDefaults().setObject(array, forKey: "text")
      

      注意: ViewController viewWillAppear 中的数组等于 NSUserDefaults 所以当你追加它时,它具有旧值,然后你在保存函数中将新值添加到它喜欢:

      array = NSUserDefaults.standardUserDefaults().objectForKey("text")
      

      【讨论】:

        猜你喜欢
        • 2015-04-20
        • 2014-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        相关资源
        最近更新 更多