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

Posted

技术标签:

【中文标题】如何使用tableview外的按钮将tableview移动到新的tableview【英文标题】:How to move tableview to new tableview with button outside tableview 【发布时间】:2017-10-16 07:53:15 【问题描述】:

所以我想通过按钮“移动到新的 tableview”(检查图片)将我的 tableview 从“ViewController”转移到我的“SecondViewController”。 在我的表格视图中,我希望使用 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()
        
    


【问题讨论】:

你想要的是将单元格(数据)移动到另一个 UIViewController 中的另一个 tableview 吗? 是的,并且在 tableview 内的其他 UIViewController 上也 传递数据并在tableView的第二个视图控制器中显示...为什么要移动单元格?试图实现这一点,以便我可以帮助你 您不移动视图,您传递的数据可以由 UITableView 表示。 【参考方案1】:

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

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

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

通过这样做,您可以将数据保存在您的第一个视图控制器中,并可以根据您的第二个视图控制器的需要使用新的委托/数据源对其进行操作。

然而,如果你不想重新实现相同的方法,你应该创建一个UITableView 的子类并只实现一次它的委托和数据源,然后在你的故事板您将每个 UITableView 类分配为您的自定义类。

【讨论】:

谢谢,这正是我需要的【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

第二种解决方案:如果你想在多个视图控制器中使用同一个表视图,你应该创建一个基础视图控制器并从基础视图控制器中获取数据。如果你想更新你的所有表格视图,你必须做的一件事就是更新你的基础视图控制器。

【讨论】:

以上是关于如何使用tableview外的按钮将tableview移动到新的tableview的主要内容,如果未能解决你的问题,请参考以下文章

如何将tableView的约束设置为viewController?

UIRefreshControl 导致不正确的 TableView 偏移量

协助区分 URL 和 Tableview 数据

在单元格中单击时,tableView:indexPathForCell 返回 nil

使用自动布局将视图定位在 tableview 的顶部

在 tableview 的文本字段中搜索