代码之家  ›  专栏  ›  技术社区  ›  Tigran

如何将用户输入添加到TableViewController。还请向我解释一下,MVC在这种情况下是如何工作的

  •  -1
  • Tigran  · 技术社区  · 7 年前

    这是UI。所以初始视图是我的tableViewController,它是空的。它有一个“添加”按钮,当用户点击它时,新的viewController会显示文本字段和按钮。当用户点击按钮时,程序会自动添加文本字段。文本发送到tableviewController,并返回到它。

    enter image description here

    这是tableViewController的代码。

    import UIKit
    
    class MyTableViewController: UITableViewController {
    
    var myArray = [String]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return myArray.count
    }
    
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? MyTableViewCell {
            cell.myLabel.text = myArray[indexPath.row]
            return cell
    
        }
    
        return UITableViewCell()
    }
    
    
    }
    

    这是viewController的代码。我试图创建tableViewController的一个对象,并获取其数组,然后将用户输入添加到该数组中。之后,我重新加载tableView。但当我回去的时候,它不起作用。请帮助我了解这是如何工作的。

    import UIKit
    
    class ViewController: UIViewController {
    
    @IBOutlet weak var myTexfield: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
    }
    
    
    @IBAction func saveAndGoBack(_ sender: UIButton) {
        let myTableViewControllerObject = MyTableViewController()
        myTableViewControllerObject.myArray.append(myTexfield.text ?? "No value")
        myTableViewControllerObject.tableView.reloadData()
    
    }
    
    
    }
    

    还有,如果有人能向我展示同样的东西如何与MVC协同工作,那将是完美的。我的意思是,在这种情况下我缺少模型,我知道在viewControllers之间创建连接来传递数据是非常糟糕的。

    更新() enter image description here

    1 回复  |  直到 7 年前
        1
  •  0
  •   Britto Thomas    7 年前

    通过创建 let myTableViewControllerObject = MyTableViewController() MyTableViewController的新实例无法检索旧视图。在代码中创建一个新实例。相反,您需要获取旧视图的引用。

    如果你使用了模态演示,你可以通过指责 self.presentingViewController

    @IBAction func saveAndGoBack(_ sender: UIButton) {
      let myTableViewControllerObject = (self.presentingViewController as! MyTableViewController)
      myTableViewControllerObject.myArray.append(myTexfield.text ?? "No value")
      myTableViewControllerObject.tableView.reloadData()
      self.dismiss(animated: true, completion: nil)
    }
    

    N: B类

    如果您是MyTableViewController中的UINavigationController,请将代码更改为

     let myTableViewControllerObject = (self.presentingViewController as! UINavigationController)!.viewControllers.first as! MyTableViewController