问题1)
我花了几个小时试图找出这个问题,从我读过的那些是实现UITableView所需的两个函数,但它仍然给我标题中的错误:
import UIKit
class UITableView: UIViewController, UITableViewDataSource,UITableViewDelegate
{
override func viewDidLoad()
{
super.viewDidLoad()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
}
}
问题2)
TableView是我为我的应用程序实现的选项卡式视图控制器的一部分。我希望我的TableView控制器有一个条目,一旦按下将打开另一个ViewController。我该如何实现类似的东西?
提前谢谢
答案 0 :(得分:1)
您错误地设置了ViewController。创建一个UITableViewController,它只是一个UITableView,或者将UITableView添加到UIViewController(就像你几乎已经完成的那样)。
didSelectRowAt方法将允许你转换到一个新的viewController,但在我的例子中只有在故事板中正确设置。
UITableViewController选项
class TableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 0
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
// Configure the cell...
return cell
}
// MARK: - Table view delegate
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: false)
performSegue(withIdentifier: "SegueIdentifier", sender: self)
}
UIViewController选项
(在此示例中需要通过Storyboard添加UITableView)
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
// MARK: - Table view data source
func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
// Configure the cell...
return cell
}
// MARK: - Table view delegate
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: false)
performSegue(withIdentifier: "SegueIdentifier", sender: self)
}
答案 1 :(得分:0)
您不应该使用UITableView
来管理数据源。这应该是UITableViewController
的工作,它管理要在UITableView
上显示的数据。 View
一般只应该担心如何显示数据,而不是管理数据。请参阅Apple的MVC design pattern。
Apple有一个非常好的,完整的Swift App tutorial(请参阅显示数据),其中介绍了如何使用使用storyboard构建的表视图设置UITableViewController
。您还可以在页面末尾下载并运行源项目。我强烈推荐它。
答案 2 :(得分:-1)
您必须实施此Mendatory DataSource方法
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "", for: indexPath)
return cell
}
希望它有所帮助。