如何从scrollview中删除子视图?

我如何从我的滚动视图中删除所有子视图...

我有一个uview和一个按钮上方的滚动视图这样的事情....

这里是我的代码在滚动视图中添加子视图

-(void)AddOneButton:(NSInteger)myButtonTag {
lastButtonNumber = lastButtonNumber + 1;

if ((lastButtonNumber == 1) || ((lastButtonNumber%2) == 1)) {
btnLeft = 8;}
else if ((lastButtonNumber == 2) || ((lastButtonNumber%2) == 0)) {
btnLeft = 162;
}
CGRect frame1 = CGRectMake(btnLeft, btnTop, 150, 150);
CGRect frame2 = CGRectMake(btnLeft, btnTop, 150, 150);
UIButton *Button = [UIButton buttonWithType:UIButtonTypeCustom];
Button.frame = frame1;
Button.tag = myButtonTag;
[Button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
[Button setBackgroundColor:[UIColor clearColor]];
[Button setBackgroundImage:[UIImage imageNamed:@"WaitScreen.png"] forState:UIControlStateHighlighted];

    GraphThumbViewControllerobj = [[GraphThumbViewController alloc] initWithPageNumber:[[GraphIdArray objectAtIndex:myButtonTag]intValue]];
    GraphThumbViewControllerobj.view.frame=frame2;
    GraphThumbViewControllerobj.lblCounter.text=[NSString stringWithFormat:@"%d of %d",myButtonTag+1,flashCardsId.count];
    GraphThumbViewControllerobj.lblQuestion.text=[flashCardText objectAtIndex:myButtonTag];
    [myScrollView addSubview:GraphThumbViewControllerobj.view];


[myScrollView addSubview:Button];


if ((lastButtonNumber == 2) || ((lastButtonNumber%2) == 0)) {
btnTop = btnTop + 162;
}
if (btnTop+150 > myScrollView.frame.size.height) {
myScrollView.contentSize = CGSizeMake((myScrollView.frame.size.width), (btnTop+160));}
}

这里是删除子视图的代码

if(myScrollView!=nil)
{
        while ([myScrollView.subviews count] > 0) {
            //NSLog(@"subviews Count=%d",[[myScrollView subviews]count]);
            [[[myScrollView subviews] objectAtIndex:0] removeFromSuperview];
}

替代文字http://www.freeimagehosting.net/uploads/e5339a1f51.png


要从任何视图中删除所有子视图,可以遍历子视图并发送每个removeFromSuperview调用:

// With some valid UIView *view:
for(UIView *subview in [view subviews]) {
    [subview removeFromSuperview];
}

不过,这完全是无条件的,并且会摆脱给定视图中的所有子视图。 如果你想要更细致的东西,你可以采取几种不同的方法:

  • 维护您自己的不同类型的视图数组,以便稍后以相同的方式发送removeFromSuperview消息
  • 保留您创建视图的所有视图并按住指向这些视图的指针,以便根据需要将它们分别发送给removeFromSuperview
  • 在上面的循环中添加一个if语句,检查类是否相等。 例如,要仅删除视图中存在的所有UIButton(或UIButton的自定义子类),可以使用如下所示的内容:
  • // Again, valid UIView *view:
    for(UIView *subview in [view subviews]) {
        if([subview isKindOfClass:[UIButton class]]) {
            [subview removeFromSuperview];
        } else {
            // Do nothing - not a UIButton or subclass instance
        }
    }

    一个古老的问题; 但是因为这是Google上的第一次打击,所以我想我还会记下这个方法:

    [[myScrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
    

    你不能这样做isKindOfClass检查,但它仍然是一个很好的解决方案。

    编辑:另一点需要注意的是,scrollview的滚动条被添加为该滚动视图的子视图。 因此,如果你迭代scrollview的所有子视图,你会遇到它。 如果被移除,它会再次添加自己 - 但如果您只希望自己的UIView子类在那里,那么知道这一点很重要。

    Swift 3的修正:

    myScrollView.subviews.forEach { $0.removeFromSuperview() }
    

    为了补充Tim的话,我注意到你正在标记你的观点。 如果您想使用某个标签删除视图,您可以使用:

    [[myScrollView viewWithTag:myButtonTag] removeFromSuperview];
    
    链接地址: http://www.djcxy.com/p/74373.html

    上一篇: how to remove subviews from scrollview?

    下一篇: Make a float only show two decimal places