如何使用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 中,根据需要实现 UITableViewDataSource
和 UITableViewDelegate
,但再次使用 pelaajat
数据。
通过这样做,您可以将数据保存在您的第一个视图控制器中,并可以根据您的第二个视图控制器的需要使用新的委托/数据源对其进行操作。
然而,如果你不想重新实现相同的方法,你应该创建一个UITableView
的子类并只实现一次它的委托和数据源,然后在你的故事板您将每个 UITableView
类分配为您的自定义类。
【讨论】:
谢谢,这正是我需要的【参考方案2】:最简单的方法是在单独的类下抽象您的 DataSource 并将其传递给这两个 UIViewController。
如果您还想在多个 UITableView 类之间共享单元原型 - 实现此目的的最简单方法是将这些原型准备在单独的 .xib 文件中(每个 UITableViewCell 在单独的 XIB 中)。
【讨论】:
【参考方案3】:第一个解决方案:将数据(pelaajat)发送到具有 segue 发送器的另一个视图控制器。并在第二个视图控制器中设置相同的值。
第二种解决方案:如果你想在多个视图控制器中使用同一个表视图,你应该创建一个基础视图控制器并从基础视图控制器中获取数据。如果你想更新你的所有表格视图,你必须做的一件事就是更新你的基础视图控制器。
【讨论】:
以上是关于如何使用tableview外的按钮将tableview移动到新的tableview的主要内容,如果未能解决你的问题,请参考以下文章
如何将tableView的约束设置为viewController?
UIRefreshControl 导致不正确的 TableView 偏移量