我正在尝试在常规视图控制器中嵌入表视图,因为除了表视图之外,我还希望在视图控制器中使用其他视图。我有一个表视图控制器,其中包含一些我最重要的方法。我复制了表视图控制器的代码,将其粘贴到Table View .swift文件中,并在每个方法之前删除了“覆盖”,因为这些方法不是Table View类固有的。不幸的是,我仍然在代码的几行中出现错误:
super.viewDidLoad() “类型'UITableView'的值没有成员'viewDidLoad'”
tableView.rowHeight = UITableViewAutomaticDimension “对成员'tableView(_:numberOfRowsInSection :)'的模糊引用”
tableView.estimatedRowHeight = 60.0 “对成员'tableView(_:numberOfRowsInSection :)'的模糊引用”
super.didReceiveMemoryWarning() “类型'UITableView'的值没有成员'didReceiveMemoryWarning'”
tableView.insertRows(at:[indexPath],with:。auto] “对成员'tableView(_:numberOfRowsInSection :)'的模糊引用”
我需要对这些代码行执行哪些操作才能运行程序?如果我按原样保留代码,它就无法构建,如果我在这些代码行前放了两个斜杠,它就会运行,但只会创建一个黑屏。任何帮助将不胜感激!谢谢!
import UIKit
class TaskListTableView: UITableView {
var tasks:[Task] = taskData
func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 60.0
}
func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tasks.count
}
@IBAction func cancelToLoLFirstTableViewController(_ segue:UIStoryboardSegue) {
}
@IBAction func saveAddTask(_ segue:UIStoryboardSegue) {
if let AddTaskTableViewController = segue.source as? AddTaskTableViewController {
if let task = AddTaskTableViewController.task {
tasks.append(task)
let indexPath = IndexPath(row: tasks.count-1, section: 0)
tableView.insertRows(at: [indexPath], with: .automatic)
}
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
-> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TaskCell", for: indexPath)
as! TaskCell
let task = tasks[indexPath.row] as Task
cell.task = task
return cell
}
}
答案 0 :(得分:0)
我认为您对UITableView
和UITableViewController
类的作用感到困惑。
UITableView
类是绘制您在屏幕上看到的表视图组件的类,在必要时更新它并解释您的点击并滚动到一个有意义的表格中。 UITableView
扩展了UIView
。
UITableViewController
类旨在管理UITableView
实例,提供数据以显示和响应它生成的操作。它是UIViewController
类的扩展。
UIView
和UIViewController
完全不同,执行完全不同的功能。你不能将代码从一个剪切和粘贴到另一个,因为他们不会理解它。
所以我的第一个建议是打书。阅读UIView
和UIViewController
所做的事情,了解他们在iOS世界中的位置以及它们之间的关系。然后查看UITableView
和UITableViewController
。
其次,关于你想要一个带有表格视图的屏幕以及其他组件的问题。有多种方法可以做到这一点,最佳解决方案将根据您尝试构建的UI的复杂性以及其背后的数据和代码而有所不同。
一旦掌握了视图和控制器的工作方式。我首先要构建一个简单的屏幕,其上有几个简单的组件,后面有一个控制器。即。您编写的一个扩展UIViewController
的课程。
如果您对此感到满意,您通常会看到两种选择:
您可以添加UITableView
UI组件,并将UITableViewController
设置为dataSource <UITableViewDataSource>
和delegate <UITableViewDelegate>
。然后从这些协议中添加各种方法,以定义要显示的数据以及控制器如何响应表视图上的操作。
如果#1太乱,你应该看一个更复杂的选择。这种选择可以使代码更清晰。您可以添加UITableView
UI组件,而不是添加UIContainerView
UI组件。 UIContainerView
旨在链接到单独的控制器和视图。实际上这意味着你有两个控制器。一个用于一般UI组件,一个用于表视图。
这完全取决于你想要做什么。但首先你需要做一些阅读。