问题描述
嘿,我有一个可用的 UITable,它可以从我的数组中加载项目,但现在我需要在单击 UITable 的特定项目时进行调用
我在视图控制器的代码下面有我自己的类,我可以像这样创建它:
class TableDataSource: NSObject,UITableViewDataSource {
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let identifier = "\(UITableViewCell.self)"
let item = items[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: identifier) ?? UITableViewCell(style: .subtitle,reuseIdentifier: identifier)
cell.textLabel?.text = item
return cell
}
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
print("lol")
}
var items: [String] = []
func attach(to view: UITableView) {
// Setup itself as table data source (Implementation in separated extension)
view.dataSource = self
// Register element for dequeuing (All dequeuing element must register in table before)
view.register(UITableViewCell.self,forCellReuseIdentifier: "\(UITableViewCell.self)")
}
}
正如你所看到的,我有一个 didSelectRowAt,它应该只打印“lol”作为测试,但这不起作用
为了初始化这个 UITable 我确实这样称呼它
@IBOutlet weak var TableItemsView: UITableView!
private let dataSource = TableDataSource()
var nutList = ["empty"]
我从 firebase 调用我的数组并将其应用到 nutList:
if let document = document,document.exists {
self.nutList = document.get("nutList") as! [String]
self.dataSource.attach(to: self.TableItemsView)
self.dataSource.items = self.nutList
} else {
print("No food...")
}
一切正常,它显示所有项目和东西,但是当我单击一个单独的项目时,它不会打印我想要的内容。有什么想法吗?
解决方法
您需要在 viewDidLoad
中设置您的委托和数据源。
应该是这样的:
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
,
raise FieldError(message)
django.core.exceptions.FieldError: Unknown field(s) (username) specified for MyUser
属于 didSelectRowAt
。如果你想在你需要采用协议的同一个类中实现这个方法
UITableViewDelegate
并在class TableDataSource: NSObject,UITableViewDataSource,UITableViewDelegate { ...
delegate
attach(to