我有一个包含7个子视图的自定义UITableViewCell
。其中一个是活动视图,所以为了找到并停止,我做这样的事情:
NSArray *subviews=[cell subviews];
NSLog(@"Subviews count: %d",subviews.count);
for (UIView *view in subviews)
{
NSLog(@"CLASS: %@",[view class]);
// code here
}
在 iOS6 中,子视图计数: 7 ,其中一个是活动视图。
但在 iOS7 中,子视图计数: 1 ,[view class]返回 UITableViewCellScrollView 。
尝试过,NSArray *subviews=[cell.superview subviews];
和NSArray *subviews=[cell.contentview subviews];
,但徒劳无功。
有什么建议吗?
答案 0 :(得分:13)
您需要以递归方式下降到每个子视图的子视图中,依此类推。永远不要对私有子视图结构做任何假设。更好的是,因为您只应将子视图添加到单元格的contentView
,只需查看contentView
,而不是整个单元格。
答案 1 :(得分:1)
我认为您应该在代码中添加条件语句:
NSArray *subviews;
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
subviews = aCell.contentView.subviews;
else
subviews = aCell.subviews;
for(id aView in subviews) {
if([aView isKindOfClass:[aField class]]) {
//your code here
}
}
//don't forget to add a conditional statement even on adding your subviews to cell
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
[aCell.contentView addSubview:aField];
else
[aCell addSubview:aField];
这是上述SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO宏的定义:
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
答案 2 :(得分:1)
我在单元格上动态添加imageview
,因此self.contentview.subviews
删除了分隔线和附件视图。所以我做的就是
for (id obj in self.contentView.superview.subviews) {
if ([obj isMemberOfClass:[UIImageView class]]) {
[obj removeFromSuperview];
}
}
为我工作,希望很少有人能够工作!
答案 3 :(得分:0)
以下是如何迭代Custom UITableViewCell内的控件
UITableViewCell *cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"anyname"];
UIView *view=cell.contentView;
for(id object in view.subviews)
{
if([object isKindOfClass:[UILabel class]])
{
NSLog(@"%@",[object class]);
// UILabel *label= (UILabel*)view;
//[label setFont:TextFont];
}
}
您可以根据特定控件的类检查任何类型的控件。
答案 4 :(得分:0)
由于我还没有看到这个问题的正确答案,即使这是一年之久,我也会在这里发布。 (感谢已经发布此事的Brian Nickel)。首先,你只获得一个视图,因为单元格有一个内容视图,所有它的孩子都住在这里(已经解释了这么多)。
至于如何在contentView
中查找您的观点,在Apple https://developer.apple.com/library/ios/documentation/userexperience/conceptual/tableview_iphone/TableViewCells/TableViewCells.html的此文档中,您可以看到他们建议使用viewWithTag:
来获取内容视图中的视图。因此,您需要标记内容视图中的每个视图或仅标记要查找的视图,然后调用:
[cell.contentView viewWithTag: tag]
希望能帮助像我这样的任何谷歌。