从UITableViewController更改为UITableView时出错

时间:2017-01-29 23:49:29

标签: iphone uitableview

我正在尝试在常规视图控制器中嵌入表视图,因为除了表视图之外,我还希望在视图控制器中使用其他视图。我有一个表视图控制器,其中包含一些我最重要的方法。我复制了表视图控制器的代码,将其粘贴到Table View .swift文件中,并在每个方法之前删除了“覆盖”,因为这些方法不是Table View类固有的。不幸的是,我仍然在代码的几行中出现错误:

  1. super.viewDidLoad() “类型'UITableView'的值没有成员'viewDidLoad'”

  2. tableView.rowHeight = UITableViewAutomaticDimension “对成员'tableView(_:numberOfRowsInSection :)'的模糊引用”

  3. tableView.estimatedRowHeight = 60.0 “对成员'tableView(_:numberOfRowsInSection :)'的模糊引用”

  4. super.didReceiveMemoryWarning() “类型'UITableView'的值没有成员'didReceiveMemoryWarning'”

  5. tableView.insertRows(at:[indexPath],with:。auto] “对成员'tableView(_:numberOfRowsInSection :)'的模糊引用”

  6. 我需要对这些代码行执行哪些操作才能运行程序?如果我按原样保留代码,它就无法构建,如果我在这些代码行前放了两个斜杠,它就会运行,但只会创建一个黑屏。任何帮助将不胜感激!谢谢!

    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
    }
    
    }
    

1 个答案:

答案 0 :(得分:0)

我认为您对UITableViewUITableViewController类的作用感到困惑。

UITableView类是绘制您在屏幕上看到的表视图组件的类,在必要时更新它并解释您的点击并滚动到一个有意义的表格中。 UITableView扩展了UIView

UITableViewController类旨在管理UITableView实例,提供数据以显示和响应它生成的操作。它是UIViewController类的扩展。

UIViewUIViewController完全不同,执行完全不同的功能。你不能将代码从一个剪切和粘贴到另一个,因为他们不会理解它。

所以我的第一个建议是打书。阅读UIViewUIViewController所做的事情,了解他们在iOS世界中的位置以及它们之间的关系。然后查看UITableViewUITableViewController

其次,关于你想要一个带有表格视图的屏幕以及其他组件的问题。有多种方法可以做到这一点,最佳解决方案将根据您尝试构建的UI的复杂性以及其背后的数据和代码而有所不同。

一旦掌握了视图和控制器的工作方式。我首先要构建一个简单的屏幕,其上有几个简单的组件,后面有一个控制器。即。您编写的一个扩展UIViewController的课程。

如果您对此感到满意,您通常会看到两种选择:

  1. 您可以添加UITableView UI组件,并将UITableViewController设置为dataSource <UITableViewDataSource>delegate <UITableViewDelegate>。然后从这些协议中添加各种方法,以定义要显示的数据以及控制器如何响应表视图上的操作。

  2. 如果#1太乱,你应该看一个更复杂的选择。这种选择可以使代码更清晰。您可以添加UITableView UI组件,而不是添加UIContainerView UI组件。 UIContainerView旨在链接到单独的控制器和视图。实际上这意味着你有两个控制器。一个用于一般UI组件,一个用于表视图。

  3. 这完全取决于你想要做什么。但首先你需要做一些阅读。