到目前为止我做了什么:
我创建了一个空行的tableView控制器,以及另一个ViewController上的弹出窗口,弹出窗口的目的是在一个ROW(传递Textfields)上向tableView添加两个数据(名称 - 链接)。
我想要的是什么:
当我添加一个新的原始(名称 - 链接)单击保存时,我希望存储数据,当我添加其他数据时,创建另一行。
我的问题:当我托盘添加更多原始数据时,它总是比旧数据更快,所以无论输入多少数据,结果总是为1行!
弹出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
}
答案 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()