所以我想将我的tableview从“ViewController”转移到我的“SecondViewController”,按钮“Move to new tableview”(查看图片)。 在我的tableview中,我希望将我添加的所有单元格都添加到pelaajat.append
模拟器和故事板图片在下面给出。
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var tableView: UITableView!
var pelaajat = [String]()
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView(frame: CGRect.zero)
}
@IBAction func movetoNewTableview(_ sender: Any) {
}
@IBAction func addName(_ sender: Any) {
lisaaPelaajanNimi()
}
func lisaaPelaajanNimi(){
pelaajat.append(textField.text!)
let indexPath = IndexPath(row: pelaajat.count - 1, section: 0)
tableView.beginUpdates()
tableView.insertRows(at: [indexPath], with: .automatic)
tableView.endUpdates()
textField.text = ""
view.endEditing(true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return pelaajat.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell")
cell.textLabel?.text = pelaajat[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete{
pelaajat.remove(at: indexPath.row)
tableView.beginUpdates()
tableView.deleteRows(at: [indexPath], with: .automatic)
tableView.endUpdates()
}
}
}
答案 0 :(得分:0)
在您的UIButton
操作中,在执行推送之前,您应该将var pelaajat
传递给新的UIViewController:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let secondViewController = segue.destination
secondViewController.pelaajat = self.pelaajat
}
在SecondViewController 中,根据需要实施UITableViewDataSource
和UITableViewDelegate
,但再次使用pelaajat
数据。
通过执行此操作,您可以保留第一个视图控制器中的数据,并可以使用新的委托/数据源根据您的第二个视图控制器需求对其进行操作。
但是,如果您不想再重复实现相同的方法,则应创建UITableView
的子类并仅实现其委托和数据源一次,然后在 Storyboard 上,您将每个UITableView
类指定为自定义类。
答案 1 :(得分:0)
最简单的方法是在单独的类下抽象DataSource并将它传递给这两个UIViewControllers。
如果您还想在多个UITableView类之间共享单元原型 - 最简单的方法是在单独的.xib文件中准备这些原型(每个UITableViewCell在一个单独的XIB中)。
答案 2 :(得分:0)
第一个解决方案:使用segue发送器将数据(pelaajat)发送到另一个视图控制器。并在第二个视图控制器中设置相同的值。
第二种解决方案:如果要在多个视图控制器中使用相同的表视图,则应创建基本视图控制器并从基本视图控制器获取数据。如果要更新所有表视图,则需要做的一件事就是更新基本视图控制器。