如何从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