2017-08-27 62 views
1

這是我到目前爲止的代碼。我可以進入文本框並將其顯示在UITableView中,但只有在我重新加載頁面並返回之後。我想要輸入到文本框中,當我點擊「添加」時,它會自動出現在UITableView中。從文本字段添加entires到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") 
    } 
} 
+0

刷新表,則剛過你在數組中追加數據,而不是做在viewDidAppear。 –

+0

我試過這個解決方案,但沒有運氣......我必須回去一個ViewController並回到ViewController與文本字段和TableView,然後纔會出現...任何其他想法... – LeiLei1

回答

0

它適用於我。

添加textfieldtableview的插座。

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

添加IBAction添加行動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() 
    } 

創建array持有字符串值 - :

var data = [String]() 

表上添加table方法來填充數據上單擊添加按鈕。

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 
    } 

完整的代碼 - :在附加功能

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 
    } 
} 
+0

真棒!!!!!十分感謝你的幫助! – LeiLei1

+0

@ LeiLei1如果有幫助,請接受答案。:) –

1

無論何時更改i​​tems數組,您都需要將表視圖告訴reloadData()。因此,請嘗試將table.reloadData()添加到add函數的末尾。

+0

我試過這個解決方案,但沒有運氣...我必須回去一個ViewController並回到與Textfield和TableView的ViewController,然後纔會出現...任何其他想法... – LeiLei1