我有一个类,其中有两个方法_addView()和_removeView()。
这些方法我在另一个类中用于添加视图和删除视图但它不起作用。如果我使用的是同样的工作。
删除 -
- (id)deleteBoxAtIndex:(int)boxIndex{
for (int i = 0; i < [[self subviews] count]; i++ ) {
[[[self subviews] objectAtIndex:boxIndex] removeFromSuperview];
}
return self;
}
然后我如何计算该类中的子视图或从该类中删除。
答案 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];
}