从另一个viewController

时间:2018-04-23 18:12:50

标签: ios swift uitableview row

到目前为止我做了什么:

我创建了一个空行的tableView控制器,以及另一个ViewController上的弹出窗口,弹出窗口的目的是在一个ROW(传递Textfields)上向tableView添加两个数据(名称 - 链接)。

我想要的是什么:

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

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

enter image description here

弹出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!)
}

HomeScreen 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
}

3 个答案:

答案 0 :(得分:1)

将数组声明移动到global并在tableView中调用reloadData,如下所示:

//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()
}

您的VC

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
}

答案 1 :(得分:1)

好吧,看起来你每次都要去一个全新的TestVC实例。所以,它不会覆盖旧线。它在TestVC的新实例中添加了一个新行。我推断这是因为你在add(name:link:)中调用了prepareForSegue,当一个新的viewController被放在带有segue的屏幕上时会被故事板调用。

此外,如果您希望更新屏幕,则add(name:link:)方法应致电tableView.reloadData()

答案 2 :(得分:0)

很简单,在向数据源(名称)添加新项目后,您需要重新加载tableview。

self.tableView.reloadData()