如何在超级视图中计算子视图

时间:2011-08-09 12:25:48

标签: iphone objective-c

我有一个类,其中有两个方法_addView()和_removeView()。

这些方法我在另一个类中用于添加视图和删除视图但它不起作用。如果我使用的是同样的工作。

删除 -

- (id)deleteBoxAtIndex:(int)boxIndex{      
    for (int i = 0; i < [[self subviews] count]; i++ ) {
        [[[self subviews] objectAtIndex:boxIndex] removeFromSuperview];
    }

    return self;
}

然后我如何计算该类中的子视图或从该类中删除。

5 个答案:

答案 0 :(得分:8)

您尝试使用[self.subviews count]计算子视图的数量是正确的,但是有一种优雅的方法可以从Objective-C中的视图中删除所有子视图。试试这个:

[self.subviews makeObjectsPerformSelector:@selector(removeFromSuperView)];

答案 1 :(得分:3)

您应该将指向UIView实例(已获得subview s的实例)的指针传递给另一个对象,以便您可以调用:

 myView.subviews

我不知道这是否适合你:

- (id)deleteBoxAtIndex:(int)boxIndex fromView:(UIView*)view {      
  for (int i = 0; i < [[view subviews] count]; i++ ) {
    [[[view subviews] objectAtIndex:boxIndex] removeFromSuperview];
  }

  return self;
}

如果你提供关于你提到的两个类之间关系的更多细节(基本上,名称以及如何与另一个进行交互),我可以给你更多提示。

答案 2 :(得分:1)

您的问题不在于检索计数,而是在您的for循环逻辑执行中动态更改的计数中继。以下列方式清理子视图:

while([[self subviews] count] > 0) {
    UIView *view = [[self subviews] objectAtIndex:0];
    [view removeFromSuperview];
}

答案 3 :(得分:0)

您可以使用superview属性:

[[self superview] subviews]

执行类似的循环,你正在做右行。但是我强烈建议您使用

[[self superview] viewWithTag:boxIndex]

而不是objectAtIndex:方法

答案 4 :(得分:0)

只需对要删除的所有子视图进行循环:

for (UIView *subs in [self.view subviews]){
    [subs removeFromSuperview];

}