【发布时间】: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