UITableViewCell子视图仅返回iOS7中的UITableViewCellScrollView

时间:2013-10-04 05:22:53

标签: ios objective-c uitableview ios7

我有一个包含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];,但徒劳无功。

有什么建议吗?

5 个答案:

答案 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] 希望能帮助像我这样的任何谷歌。