add entires from textfield to UITableView to automatically populate

This is the code I have so far. I am able to enter into the textfield and have it appear in the UITableView, but only after I reload the page and come back to it. I want for what I enter into the textfield and when I click ‘add’ for it to automatically appear in the UITableView.

@IBOutlet var itemTextField: UITextField!
@IBOutlet var table: UITableView!

var items: [String] = []

@IBAction func add(_ sender: Any) {
    let itemsObject = UserDefaults.standard.object(forKey: "items")

    var items:[String]

    if let tempItems = itemsObject as? [String] {
        items = tempItems
        items.append(itemTextField.text!)

        print(items)
    } else {
        items = [itemTextField.text!]
    }

    UserDefaults.standard.set(items, forKey: "items" )
    itemTextField.text = ""
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()

    return true
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")

    cell.textLabel?.text = items[indexPath.row]
    cell.textLabel?.font = UIFont(name: "Type02", size: 20)

    return cell
}

override func viewDidAppear(_ animated: Bool) {
    let itemsOBject = UserDefaults.standard.object(forKey: "items")

    if let tempItems = itemsOBject as? [String]{
        items = tempItems
    }

    table.reloadData()
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == UITableViewCellEditingStyle.delete {
        items.remove(at: indexPath.row)

        table.reloadData()

        UserDefaults.standard.set(items, forKey: "items")
    }
}

  • Set UITextField text property in prepareForSegue
  • UITextField in UIAlertController (border, backgroundColor)
  • How can I limit the number of decimal points in a UITextField?
  • UITextField set cursor to start text position
  • Adding a cancel button to UITextField keyboard
  • UITextField with rounded corners only on top
  • 2 Solutions Collect From Internet About “add entires from textfield to UITableView to automatically populate”

    It works for me .

    Add outlet for textfield and tableview.

     @IBOutlet weak var nametextField: UITextField!
     @IBOutlet weak var dataTableView: UITableView!
    

    Add IBAction for Add action button.

    @IBAction func addNameToTable(_ sender: Any) {
    
            // Check for value in nameTextField
            guard let profilename = nametextField.text else{
              return
            }
            // Append text field value in data array
            data.append(profilename)
           // Reload table to show text field name in table
            dataTableView.reloadData()
        }
    

    Create array to hold string values-:

    var data = [String]()
    

    Add table methods to populate data on table on clicking Add button.

    func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        }// Default is 1 if not implemented
    
        // return array count
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
            return data.count
        }
    
        // dequeue cell
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
            cell.textLabel?.text = data[indexPath.row]
            return cell
        }
    
        // Row height
        public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{
            return 50
        }
    

    COMPLETE CODE -:

    import UIKit
    import AVKit
    class ViewController: UIViewController {
    
        @IBOutlet weak var nametextField: UITextField!
        @IBOutlet weak var dataTableView: UITableView!
        var data = [String]()
    
        //MArk-: ViewDidLoad
        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 addNameToTable(_ sender: Any) {
    
            guard let profilename = nametextField.text else{
              return
            }
            data.append(profilename)
            dataTableView.reloadData()
        }
    }
    
    extension ViewController : UITableViewDelegate,UITableViewDataSource{
    
        func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        }// Default is 1 if not implemented
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
            return data.count
        }
    
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell") 
            cell.textLabel?.text = data[indexPath.row]
            return cell
        }
    
        public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{
            return 50
        }
    }
    

    You need to tell the table view to reloadData() whenever the items array changes. So try adding table.reloadData() to the end of your add function.