Ios 我是否可以通过编程方式检查UITableViewCell是什么样式?
在计算UITableViewCell的高度时,如果我能够知道我的UITableViewCell设置为什么,这将非常有用。我没有看到单元格本身的任何属性。这可能吗?是的,你可以。您可以访问tableview上的Ios 我是否可以通过编程方式检查UITableViewCell是什么样式?,ios,objective-c,uitableview,Ios,Objective C,Uitableview,在计算UITableViewCell的高度时,如果我能够知道我的UITableViewCell设置为什么,这将非常有用。我没有看到单元格本身的任何属性。这可能吗?是的,你可以。您可以访问tableview上的style方法以返回当前样式 编辑: 哎呀,我刚注意到你在问一个UITableViewCell。理想情况下,您不需要知道单元格的样式,因为您实际上无法更改现有单元格的样式。只能使用以下样式初始化单元格: cell = [[UITableViewCell alloc] initWithStyl
style
方法以返回当前样式
编辑:
哎呀,我刚注意到你在问一个UITableViewCell。理想情况下,您不需要知道单元格的样式,因为您实际上无法更改现有单元格的样式。只能使用以下样式初始化单元格:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier];
否,Apple不公开UITableViewCell的style属性。但你有两个选择
UITableViewCell
子类,在调用initWithStyle时将样式保存到属性中
@property UITableViewCellStyle cellStyle;
// ...
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.cellStyle = style;
}
return self;
}
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil];
cell.tag = UITableViewCellStyleValue1;
不是直接的,或者至少不是100%可靠的 执行
[cell initWithStyle:style reuseIdentifier:foo]
时,所选样式仅用于(重新)布局单元格内容,特别是textLabel与detailTextLabel的布局。此后,风格不再真正重要。。。但是,您可以做的是随后查看生成的布局-即textLabel与detailTextLabel框架-并从它们的位置和大小推断原始选择的样式可能是什么[我之所以说“可能”,是因为如果textLabel或detailTextLabel为零,那么实际上无法区分UITableViewCellStyleDefault、UITableViewCellStyleValue1和UITableViewCellStyleSubtitle,因为你只有一个textLabel,它们看起来都一样]
也就是说,这样的东西可能满足您的需要(在[cell layoutSubviews]
之后,即):
同样,YMMV…这假设您的textLabel和detailTextLabel都是非零的
顺便说一句,通过查看标签的textAlignment,您可以进一步区分UITableViewCellStyleValue1和UITableViewCellStyleValue2,但实际上无法知道这些标签在单元格初始化为Style后的某个时间没有以编程方式重新对齐
话虽如此,如果你想在UITableViewCell被初始化为什么样式后100%可靠地检查,那么你最安全的办法就是创建一个简单的子类,它覆盖
-initWithStyle:reuseIdentifier:
,并将其保存在一个新属性中;即接受答案的选项1。出于某种奇怪的原因,苹果没有包括它属性的公共标头中的属性,但您只需调用valueForKey即可获取该属性:
UITableViewCellStyle style = [tableCell valueForKey:@"tableViewStyle"];
如果使用valueForKey与您有关,并且您使用的是故事板,那么您可以子类化并覆盖:
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) {
_cellStyle = [aDecoder decodeIntForKey:@"UITableViewCellStyle"];
}
return self;
}
其他答案显示了如何为编程创建的单元格获取它。Chase,我在寻找单元格的样式,而不是表格的样式。我会在我的问题中添加更多信息以使这一点更清楚。嗯。这是我害怕的,但如果我想实现HeightForRowatineXpath,并且我想根据单元格类型做一些不同的事情,该怎么办?+1.第一个选项是我要做的。子类化不仅允许您保存和访问问题中的信息,还可以非常轻松地保存和访问与每个单元格关联的任何其他内容。
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) {
_cellStyle = [aDecoder decodeIntForKey:@"UITableViewCellStyle"];
}
return self;
}