swift 中 UITableView 的动态数据源/委托

2023-12-02

我需要根据某些条件设置不同的对象作为表视图的数据源和委托。

但我无法分配表视图的数据源/委托,因为它会引发一些错误。

无法分配 NSObject 类型的值?为 UITableViewDelegate 类型的值?

我确实检查过this问答但这没有用。

var dataSourceDelegate:NSObject?
class RootViewController: UIViewController {
...
override func viewDidLoad() {
        dataSourceDelegate = TableDataSourceDelegate()
        // Table View
        tableView = UITableView()
        tableView!.setTranslatesAutoresizingMaskIntoConstraints(false)
        tableView!.dataSource = dataSourceDelegate 
        // Cannot assign a value of type NSObject? to a value of type UITableViewDataSource?
        tableView!.delegate = dataSourceDelegate
        // Cannot assign a value of type NSObject? to a value of type UITableViewDelegate?
        view.addSubview(tableView!)

        // Constraints
        var views:[String:UIView] = ["table":tableView!]
        var hTableConstraint = "H:|[table]|"
        var vConstraint = "V:|[table]|"
        view.addConstraintsToView([hTableConstraint, vConstraint], view: view, viewVariables: views)
    }
...
}

这是数据源/委托类

class TableDataSourceDelegate:NSObject, UITableViewDataSource, UITableViewDelegate {
    // MARK: Datasource

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return UITableViewCell()
    }

    // MARK: Delegates
}

NS对象?不符合 UITableViewDelegate,也不符合 UITableViewDataSource。你应该像这样创建你的协议

protocol GeneralDataSource: UITableViewDataSource, UITableViewDelegate {}

然后所有数据源都应该符合该协议。

class MyDataSource: NSObject, GeneralDataSource {
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return UITableViewCell()
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 2
    }

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

然后你可以像这样使用它

var myDataSource: GeneralDataSource?

override func viewDidLoad() {
    super.viewDidLoad()

    self.myDataSource = MyDataSource()
    self.tableView.delegate = self.myDataSource
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swift 中 UITableView 的动态数据源/委托 的相关文章

随机推荐

  • 确定当前调用堆栈(用于诊断目的)

    出于诊断目的 我有时需要存储导致给定状态转换的调用堆栈 例如授予锁 提交事务等 以便以后出现问题时我可以找出最初触发状态转换的人 目前 我知道检索调用堆栈的唯一方法类似于以下代码片段 我认为它非常丑陋 StackTraceElement c
  • 将 SKSpriteNode 移动到触摸位置

    上面是我的游戏的图像 一个自上而下的游戏 无论玩家触摸屏幕上的哪个位置 我都希望子弹在一段时间内到达该位置 我还希望玩家能够在屏幕上拖动手指 同样的事情也会发生 这样玩家就不必每次想要射击时都触摸屏幕 到目前为止我已经尝试了一些不同的东西
  • IE 安全设​​置设置为高 - javascript 不起作用

    一旦我将 IE 安全设 置设置为高 页面上的 javascript 就会停止执行 它不会抛出错误或任何东西 甚至警报也不起作用 如果我将安全设置设置回中等 一切都会正常进行 有人经历过这样的事情吗 此行为是设计使然 The High安全设置
  • Android 日期选择器 API 级别 11 之前的最小最大日期

    我试图将 Android 中日期选择器的最小和最大日期设置为 API 级别 11 之前 我使用了以下代码 mDatePickerField startDatePickerDialog getClass getDeclaredField mD
  • 在 Apache Felix OSGI 中安装并运行 Web 管理控制台

    我正在尝试在 Apache Felix 4 2 1 中安装并运行 Apache Felix Web 管理控制台 4 2 0 但它不起作用 我已经安装了 Felix Http Jetty 2 2 1 捆绑包 Felic Configurati
  • Internet Explorer 和 Edge 中的视频、内存管理问题,导致页面上的许多视频显示暗/黑和/或无法播放

    我们有一个页面包含 77 个左右的视频缩略图 当视频缩略图悬停在上方时 视频开始在缩略图空间内播放 当许多 8 到 60 个 具体取决于系统 浏览器 悬停在它们上方时 就会出现问题 视频开始播放不正确或不播放 基本上 平坦 冗余区域全部变暗
  • 如何从 CreateProcessWithLogonW 获取标准输出?

    我正在使用来自的代码http www pinvoke net default aspx advapi32 createprocesswithlogonw 如何从标准输出获取字符串形式的输出 就像您在命令窗口中交互运行它时显示的内容一样 ca
  • 如何使用 jQuery 以编程方式触发链接点击?

    如何使用 jQuery 以编程方式触发链接点击 your link id click 看看优秀的jquerydocs了解更多信息
  • MySQL 相当于 PostgreSQL 的 dblink 模块?

    PostgreSQL 的dblink模块允许编写针对远程 PostgreSQL 数据库执行其他 SQL 语句的 SQL 语句 MySQL 中是否有相当于 PostgreSQL 的 dblink 的工具 不完全是 然而 有FEDERATED存
  • 在 python 中,如何将 c++ 共享库的 stdout 捕获到变量

    由于其他一些原因 我使用的 C 共享库将一些文本输出到标准输出 在 python 中 我想捕获输出并保存到变量 关于重定向标准输出有很多类似的问题 但在我的代码中不起作用 例子 抑制模块调用外部库的输出 1 import sys 2 imp
  • Symfony2 - Doctrine2:跨数据库连接列抛出映射异常

    您好 想要在两个实体之间建立连接 这些实体位于不同的数据库中 这是我设置数据库配置的方法 doctrine dbal default connection default connections default driver databas
  • 如何在 jQuery 悬停菜单上允许默认子菜单

    这要从一个相关问题 在得到一个出色的答案后 我遇到了一个不可预见的功能差距 如何显示默认打开的菜单 更具体地说 如果用户登陆我的子导航中存在的页面 我希望打开该子导航并突出显示当前页面 如果他们使用菜单浏览 菜单会相应更改 但如果他们不进行
  • 如何有效地仅读取文本文件的最后一行

    需要从大日志文件中获取最后一行 最好的方法是什么 您想使用向后读取文件ReverseLineReader 如何在C 中使用迭代器反向读取文本文件 然后运行 Take 1 on it var lines new ReverseLineRead
  • 将标注添加到 Highcharts - 堆叠栏

    我正在尝试使用来自的堆叠条形图制作年龄时间表高图表 我想要有多个指向时间线中数据点的调用 我本来打算使用工具提示 但我需要始终显示所有工具提示 并且每个工具提示需要不同的内容 所以我认为使用呼叫会是更好的解决方案 如何确保我的标注指向我需要
  • 无法使用 OpenSSL 的 ssl.SSLContext() 在 Python 客户端中接收对等证书

    我是 Windows 用户 我用Python 3 6 5我导入这个版本的 OpenSSLOpenSSL 1 0 2k 我需要为 python TLS 客户端编写一个脚本 我可以根据支持的 TLS 版本 密码套件和其他配置进行自定义 客户端应
  • 为什么节点 REPL 中未定义 __dirname?

    从节点手册中我看到我可以使用以下命令获取文件的目录 dirname 但从 REPL 来看 这似乎是未定义的 这是我的误解还是错误在哪里 node gt console log dirname ReferenceError dirname i
  • JavaScript 无法通过 Rails 中的引导模板运行

    我创建了一个新的 Rails 应用程序并安装了所有必要的 gem 添加了所有文件 更新了 application js 文件 一切正常 但由于某种原因 所有与 javascript 相关的东西都不起作用 我使用这个模板 https star
  • Discord.py:想要将 message.content 读为小写,.lower() 不起作用

    import discord import asyncio import sys from discord ext import commands client commands Bot command prefix id client g
  • 检测是否安装了从右到左的语言

    检测主机 Windows 操作系统上是否安装了从右到左语言的最简单方法是什么 我需要这个才能知道 LTR 标记是否会显示为正方形 或者在主机操作系统上是否正常工作 可能是非托管 API 例如是否有效语言组 有效区域设置名称 or 有效区域设
  • swift 中 UITableView 的动态数据源/委托

    我需要根据某些条件设置不同的对象作为表视图的数据源和委托 但我无法分配表视图的数据源 委托 因为它会引发一些错误 无法分配 NSObject 类型的值 为 UITableViewDelegate 类型的值 我确实检查过this问答但这没有用