当前位置: 首页 > 面试题库 >

符合Swift中的UITableViewDelegate和UITableViewDatasource吗?

施刚毅
2023-03-14
问题内容

我正在学习swift 2.0,我想知道您是否仍然需要添加代码tableView.datasource =selftableView.delegate = self像在Obj-C中那样遵守协议?

示例代码:

class AboutViewController: UIViewController, UITableViewDataSource,   UITableViewDelegate
{
    override func viewDidLoad()
    {
        super.viewDidLoad()

        // conform to protocols
        aboutTableView.dataSource = self
        aboutTableView.delegate = self
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return 2
    }

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
    {
        return 50
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        // Code here
    }
}

现在,表格视图会在每个单元格中加载正确的数据。

但是,如果我从中删除aboutTableView.datasource =self和,则表视图为空白。为什么是这样?aboutTableView.delegate = self``viewDidLoad

仍然需要此代码,因为我很快就看到许多YouTube教程不再包含此代码,而我困惑为什么没有它我的代码就不起作用?


问题答案:

首先,这完全与您使用的语言(Swift或Objective-C)无关。

但是,有两种情况可能会引起混淆:

一个UITableViewController子类:

UITableViewController已经符合UITableViewDataSource
UITableViewDelegate。它有一个tableView特性,它dataSourcedelegate属性已经被设置为self

在子类中,通常 会覆盖 数据源和委托方法。

UIViewController 具有UITableView属性的子类:

在这里,您已经UITableView在子类中定义了一个属性,并在您的代码中对其进行了初始化,或者将其连接到接口构建器中的表视图。

在这种情况下,您必须 在代码或接口构建器中设置tableview 的dataSourceand
delegate属性,如luk2302的answer中所述。

如果数据源和委托是视图控制器本身,则必须显式声明协议一致性,并 实现 数据源和委托方法(但不能 覆盖 超类方法)。

当然,在两种情况下,都可以将表视图数据源和委托设置为 不同的 对象,而不必是视图控制器本身。



 类似资料:
  • 问题内容: 尝试符合Swift UIViewController子类中的UITableViewDataSource和UITableViewDelegate。 文件说,你应该在符合行后但那通常在超去。另一个不起作用。在超类之后使用逗号分隔的列表也不起作用 编辑: 还必须采用每种协议的所有必需方法,而我最初并未这样做。 问题答案: 您使用逗号: 但是要意识到,超类必须是逗号分隔列表中的第一项。 如果您

  • 问题内容: 在以前的Swift版本中,我有以下代码。 在最新版本的Swift 1.2中,我现在收到以下错误。 所以我将代码更改如下: 但这是行不通的。我现在收到以下错误消息。 使用Swift 1.2获取字符串长度的正确方法是什么? 问题答案: 您可以使用扩展名,例如: 您可以使用它: 或者,您可以直接通过这种方式进行计数: 这也为我工作: 对于 Swift 2.0: 另一个扩展: 如果要直接使用:

  • 问题内容: 我在AppDelegate中,尝试传递对WatchKit扩展请求的答复。我不能使用枚举数组作为其值键入为AnyObject的Dictionary中的值。在操场上进行实验显示: 当然,可以通过将枚举转换为字符串或数字来解决此问题,但是为什么这在Swift中是类型错误? 问题答案: 为了与Objective-C兼容而存在。您只能将对象放入Objective- C可以解释的数组中。Swift

  • 问题内容: 我试图在我快速编写的类上使用NSCoding协议,但是似乎无法弄清楚为什么当我实现所需的方法时,编译器会抱怨它“不符合协议NSCoding”: 这是一个错误还是我只是缺少一些东西? 问题答案: 如您在报告导航器中详细的编译器消息中所见,您的方法未正确声明: (在beta版本之间可能有所变化。)此外,该方法必须标记为: 在 Swift 3中 ,所需的方法是

  • 在以前版本的Swift中,我有以下代码。 在Swift1.2的最新版本中,我现在得到以下错误。 因此我更改代码如下: 用Swift1.2得到字符串长度的正确方法是什么?

  • 问题内容: 在Objective-C中: 在Swift中: 但是,将出现一条错误消息: 类型“ CellDatasDataSource”不符合协议“ NSObjectProtocol” 类型“ CellDatasDataSource”不符合协议“ UITableViewDataSource” 正确的方法应该是什么? 问题答案: 类型“ CellDatasDataSource”不符合协议“ NSOb