gpt4 book ai didi

ios - 在单独的文件中设置 UITableView 数据源和委托(delegate) - swift

转载 作者:搜寻专家 更新时间:2023-11-01 05:57:55 24 4
gpt4 key购买 nike

如果我想让相同的基本 UITableView 出现在两个不同的场景中,对两个表使用一个数据源和委托(delegate)位置是个好主意吗?

我想试试这个,但是当我在 IB 中选择 TableView 并尝试将线拖到 UITableView 文件的自定义类,甚至拖到另一个自定义 View Controller 时,它不会连接。似乎只能使当前的 View Controller 成为表的数据源和委托(delegate)(?)。

我想知道这是否至少类似于 this question ,但即使是,这是如何快速完成的(也许有一种新方法可以做到这一点)。

最佳答案

swift 4.1。您可以创建单独的类并从 UITableViewDataSource 和 UITableViewDelegate 类继承它。在这里,我在 DataSource 类中实现 UITableViewDataSource() 方法。您还需要确认 NSObject 这样我们就不必摆弄 @objc@class 关键字,因为 UITableViewDataSource 是一个 Objective-C 协议(protocol)

import Foundation
import UIKit

class DataSource: NSObject, UITableViewDataSource {
var formData: [FormData]? = nil

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.formData?.count ?? 0
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
let label = cell?.contentView.viewWithTag(100) as? UILabel
let type = self.formData![indexPath.row]
label?.text = type.placeHolder
return cell!
}
}

现在,我们将 DataSource 设置为 UITableView。如果我们创建单独的类,那么我们必须将数据传递给 DataSource 类。

 class ViewController: UIViewController {

@IBOutlet weak var tblView: UITableView!
var formData: [FormData]? = nil
var dataSource = DataSource()

override func viewDidLoad() {
super.viewDidLoad()
formData = FormData.array
dataSource.formData = formData // Pass data to DataSource class
tblView.dataSource = dataSource // Setting DataSource
}
}

以类似的方式,您可以在单独的类中实现 UITableViewDelegate。另一种分离 DataSource 和 Delegate 的方法是创建 viewController 的扩展。即使你可以创建单独的类,你只能为你的 View Controller 定义扩展。在您定义扩展时,您不需要传递数据。

class ViewController: UIViewController {

@IBOutlet weak var tblView: UITableView!
var formData: [FormData]? = nil

override func viewDidLoad() {
super.viewDidLoad()
formData = FormData.array
tblView.dataSource = self
}
}

extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.formData?.count ?? 0
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
let label = cell?.contentView.viewWithTag(100) as? UILabel
let type = self.formData![indexPath.row]
label?.text = type.placeHolder
label?.backgroundColor = UIColor.gray
return cell!
}
}

关于ios - 在单独的文件中设置 UITableView 数据源和委托(delegate) - swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33933921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com