【问题标题】:How toaccess properties / values from a UITableViewCell?如何从 UITableViewCell 访问属性/值?
【发布时间】:2020-05-14 21:01:51
【问题描述】:

我想从UITableViewCell 访问我的视图对象,但我不能。我无法转换我的单元格对象,因为我只有字符串UITableViewCell。例如“ClientTableViewCell”。

如何在不强制转换的情况下访问单元格中的视图和对象? 我尝试如下:

let cell = (val as AnyObject).dequeueReusableCell(withIdentifier: "ClientTableViewCell") as! UITableViewCell

我可以得到一个像这样的单元格,但我无法到达内容。像这样尝试镜面反射:

let mirror = Mirror(reflecting: cell)

但是子标签和值是可选的

【问题讨论】:

  • 您需要澄清“访问我的视图对象”的意思 ...您是在谈论要显示表格时设置属性/值吗?或者您是否试图一个已显示的单元格获取属性/值?
  • 您无权访问 tableView 吗?应该只是tableView.dequeueReusableCell(withIdentifier: "ClientTableViewCell", for: indexPath) as? ClientTableViewCell
  • @rhpekarek 我不想转换为 ClientTableViewCell,我只有“ClientTableViewCell”作为字符串。因此,我将从服务中将其作为字符串获取,并且我需要使其对所有 UITableViewCell 都具有通用性。除了 ClientTableViewCell,UserTableViewCell 也可以用作字符串。
  • 你似乎让自己的生活变得艰难。您还不如只使用一个大的 switch 语句,根据您拥有的字符串值将单元格转换为正确的类型。 Swift 没有强大的反射能力,你不能有在编译时不知道的新单元格类型。
  • 另外,由于您的单元格继承自NSObject,您可以只使用value(forKey:) 来访问单元格的属性,而无需将对象转换为特定的单元格子类。请注意,您的单元格属性需要声明为 @Objc

标签: ios swift uitableview reflection mirror


【解决方案1】:
guard let cell: ClientTableViewCell = tableView.dequeueReusableCell(withIdentifier: String(describing: ClientTableViewCell.self), for: indexPath) as? ClientTableViewCell else { return UITableViewCell() }

试试这个

【讨论】:

  • 我不想转换为 ClientTableViewCell,我只有“ClientTableViewCell”作为字符串。所以我会从服务中得到这个字符串,我需要让它对所有 UITableViewCell 通用。
猜你喜欢
  • 1970-01-01
  • 2019-10-17
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
相关资源
最近更新 更多