从另一个视图控制器向 tableView 添加一行 [英] add a row to the tableView from another viewController

查看:70
本文介绍了从另一个视图控制器向 tableView 添加一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

到目前为止我做了什么:

what I did so far:

我创建了一个带有空行的 tableView 控制器,并在另一个 ViewController 上创建了一个弹出窗口,弹出窗口的目的是将两个数据(名称 - 链接)添加到一个 ROW 上的 tableView(传递文本字段).

I create a tableView controller with empty rows, and a popup window on another ViewController, the purpose of the popup is to add two data(name - link) to the tableView on one ROW (passing Textfields).

我想要的:

当我添加一个新的原始(名称 - 链接)点击保存,我希望数据被存储,当我添加其他数据时,创建另一行.

when I add a new raw (name - link) click save , I want the data to be stored , when I add other data, create another row .

我的问题:当我托盘添加更多的原始数据时,它总是比旧的好,所以无论我输入多少数据,结果总是1行!

my problem: when I tray to add more raws, it's always wright over the old one, so no matter how much data I input, the result always be 1 row!

弹出式 VC

@IBOutlet weak var nameP: UITextField!

@IBOutlet weak var linkP: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let SEC: TEstVC  = segue.destination as! TEstVC
    SEC.add(name: nameP.text!, link: linkP.text!)
}

主屏幕 VC

class TEstVC: UIViewController, UITableViewDelegate, UITableViewDataSource {



@IBOutlet weak var tableView: UITableView!

var names = [String]()
var links = [String]()



override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.rowHeight = 100.0
    tableView.dataSource = self
    tableView.delegate = self
}

func add(name: String, link: String) {
    names.append(name)
    links.append(link)
}

override func viewWillAppear(_ animated: Bool) {


}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return names.count //or links.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
    cell.cell4Name.text = names[indexPath.row]
    cell.cell4Link.text = links[indexPath.row]

    return cell
}

推荐答案

将你的数组声明移动到全局并在你的 tableView 中调用 reloadData 像这样:

Move your array declaration to global and call reloadData in your tableView like this:

//Popup

@IBOutlet weak var nameP: UITextField!

@IBOutlet weak var linkP: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let SEC: TEstVC  = segue.destination as! TEstVC
    SEC.add(name: nameP.text!, link: linkP.text!)
    self.tableView.reloadData()
}

你的风投

var names = [String]()
var links = [String]()
class TEstVC: UIViewController, UITableViewDelegate, UITableViewDataSource {


@IBOutlet weak var tableView: UITableView!



override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.rowHeight = 100.0
    tableView.dataSource = self
    tableView.delegate = self
}

func add(name: String, link: String) {
    names.append(name)
    links.append(link)
}

override func viewWillAppear(_ animated: Bool) {


}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return names.count //or links.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
    cell.cell4Name.text = names[indexPath.row]
    cell.cell4Link.text = links[indexPath.row]

    return cell
}

这篇关于从另一个视图控制器向 tableView 添加一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆