如何使用tableview外的按钮将tableview移动到新的tableview

时间:2017-10-16 07:53:15

标签: ios iphone swift uitableview tableview

所以我想将我的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()
        }
    }

}

3 个答案:

答案 0 :(得分:0)

在您的UIButton操作中,在执行推送之前,您应该将var pelaajat传递给新的UIViewController:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let secondViewController = segue.destination
    secondViewController.pelaajat = self.pelaajat
}

在SecondViewController 中,根据需要实施UITableViewDataSourceUITableViewDelegate,但再次使用pelaajat数据。

通过执行此操作,您可以保留第一个视图控制器中的数据,并可以使用新的委托/数据源根据您的第二个视图控制器需求对其进行操作。

但是,如果您不想再重复实现相同的方法,则应创建UITableView的子类并仅实现其委托和数据源一次,然后在 Storyboard 上,您将每个UITableView类指定为自定义类。

答案 1 :(得分:0)

最简单的方法是在单独的类下抽象DataSource并将它传递给这两个UIViewControllers。

如果您还想在多个UITableView类之间共享单元原型 - 最简单的方法是在单独的.xib文件中准备这些原型(每个UITableViewCell在一个单独的XIB中)。

答案 2 :(得分:0)

第一个解决方案:使用segue发送器将数据(pelaajat)发送到另一个视图控制器。并在第二个视图控制器中设置相同的值。

第二种解决方案:如果要在多个视图控制器中使用相同的表视图,则应创建基本视图控制器并从基本视图控制器获取数据。如果要更新所有表视图,则需要做的一件事就是更新基本视图控制器。