6

我有一个UITableViewCell带有 7 个子视图的自定义。其中之一是活动视图,因此为了找到它并停止,我执行以下操作:

NSArray *subviews=[cell subviews];       
NSLog(@"Subviews count: %d",subviews.count);     
for (UIView *view in subviews)  
{                
  NSLog(@"CLASS: %@",[view class]);     
  // code here     
 }

iOS6中,Subviews count: 为7,其中之一是活动视图。但在iOS7中,Subviews count: 为1并且 [view class] 返回UITableViewCellScrollView。试过, NSArray *subviews=[cell.superview subviews];NSArray *subviews=[cell.contentview subviews];,但没有用。

有什么建议么?

4

5 回答 5

13

您需要递归地下降到每个子视图的子视图等。永远不要对私有子视图结构做任何假设。更好的是,因为您应该只向单元格添加子视图,所以contentView只需查看contentView,而不是整个单元格。

于 2013-10-04T05:25:13.220 回答
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)
于 2013-11-23T11:17:33.290 回答
1

imageview在单元格上动态添加,因此self.contentview.subviews删除了分隔线和附件视图。所以我做了类似的事情

for (id obj in self.contentView.superview.subviews) {
    if ([obj isMemberOfClass:[UIImageView class]]) {
        [obj removeFromSuperview];
    }
}

为我工作,希望对少数人有用!

于 2014-04-12T08:49:46.897 回答
0

由于我还没有看到这个问题的正确答案,即使这已经一岁了,我也会在这里发布。(归功于已经发布过此内容的 Brian Nickel)。首先,您只能获得一个视图,因为单元格有一个 contentView,所有子节点都在其中(已经解释了很多)。至于如何contentView在 Apple https://developer.apple.com/library/ios/documentation/userexperience/conceptual/tableview_iphone/TableViewCells/TableViewCells.html的文档中找到您的视图,您可以看到他们建议使用viewWithTag:获取内容视图中的视图。因此,您需要在内容视图中标记每个视图,或者只标记您想要找到的视图,然后调用: [cell.contentView viewWithTag: tag] 希望对像我这样的任何谷歌用户有所帮助。

于 2014-12-03T05:47:45.447 回答
0

以下是如何遍历自定义 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];
        }



    }

您可以根据特定控件的类检查任何类型的控件。

于 2014-03-20T18:06:38.533 回答