如何从ios中具有多个子视图的superview中删除特定子视图

如何从ios中具有多个子视图的superview中删除特定子视图,ios,objective-c,uiview,Ios,Objective C,Uiview,我正在使用循环将多个视图添加到视图中 float contactsContainerX = 6.0f; UIView *contactsContainer=[[UIView alloc] initWithFrame:CGRectMake(0.0f,4.0f,110.0f,22.0f)]; contactsContainer.backgroundColor=[UIColor colorWithRed:213.0f/255.0f green:213.0f/255.0f b

我正在使用循环将多个视图添加到视图中

float contactsContainerX = 6.0f;

UIView *contactsContainer=[[UIView alloc] initWithFrame:CGRectMake(0.0f,4.0f,110.0f,22.0f)];
            contactsContainer.backgroundColor=[UIColor  colorWithRed:213.0f/255.0f green:213.0f/255.0f blue:213.0f/255.0f alpha:1.0f];

UIButton *closeButton = [[UIButton alloc] initWithFrame:CGRectMake(90.0f, 2.0f, 18.0f, 18.0f)];
closeButton.backgroundColor = [UIColor yellowColor];

[closeButton addTarget:self action:@selector(removeFavouriteContact:) forControlEvents:UIControlEventTouchUpInside];
[contactsContainer addSubview:closeButton];

for(int x=0; x<3;x++)
{
   contactsContainer.frame = CGRectMake(contactsContainerX, contactsContainer.frame.origin.y, contactsContainer.frame.size.width, contactsContainer.frame.size.height);
   [self.contactsViewSuperContainers addSubview:contactsContainer];
    contactsContainerX = contactsContainer.frame.origin.x + contactsContainer.frame.size.width+6.0f;
    self.contactsScroller.contentSize =CGSizeMake(contactsContainerX,self.contactsViewSuperContainers.frame.size.height);
}
浮动触点CONTAINERX=6.0f;
UIView*contactsContainer=[[UIView alloc]initWithFrame:CGRectMake(0.0f、4.0f、110.0f、22.0f)];
Contacts Container.backgroundColor=[UIColor带红色:213.0f/255.0f绿色:213.0f/255.0f蓝色:213.0f/255.0f alpha:1.0f];
UIButton*closeButton=[[UIButton alloc]initWithFrame:CGRectMake(90.0f、2.0f、18.0f、18.0f)];
closeButton.backgroundColor=[UIColor yellowColor];
[closeButton addTarget:self action:@selector(RemoveFavoriteContact:)for ControlEvents:UIControlEventTouchUpInside];
[联系人联系人添加子视图:关闭按钮];
对于(int x=0;x只使用一行

[[someUIView子视图]
makeObjectsPerformSelector:@selector(removeFromSuperview)];

使用
tag
viewWithTag
属性。为
视图设置
tag
按钮
并使用
tag
获取
视图
,然后将其删除

-(void) removeFavouriteContact :(id)sender {
    NSInteger tag = sender.tag;
    UIView *view = [contactsContainer viewWithTag:tag];
    [view removeFromSuperView];
}

考虑到您的
按钮
直接添加到您在循环中添加的
视图
,您可以使用

-(void) removeFavouriteContact :(id)sender {
    [[sender superview] removeFromSuperView];
}
上述代码仅在您的按钮直接添加到视图中时有效,如果不检查按钮添加位置的级别,则在深层中,您只需附加
superview
即可获得准确的superview,如下所示

[[[[sender superview] superview] superview] removeFromSuperView];
希望能有帮助


干杯。

[[sender superview]从superview中移除];您的第一个代码块似乎不正确。在您的循环中,您每次添加相同的视图。一个视图只能添加到另一个视图一次。这将删除所有子视图。OP只想删除一个子视图。由于我正在使用同一个UIView生成多个视图,如果我为每个UIView设置标记,则循环的最后一个值将存储为final tag val因此,每当我单击任何子视图按钮时,都会记录“2”。@rmaddy,已经提到您做得不对。您应该只添加一次视图。
[[[[sender superview] superview] superview] removeFromSuperView];