将视图添加到滚动视图中

时间:2011-12-21 09:44:28

标签: iphone ios

我创建了一个滚动视图,在滚动视图中,我添加了两个备用自定义UIView s

@interface FirstView : UIView
@interface SecondView : UIView

我的数组是

 NSMutableArray *classArray= [[NSMutableArray alloc] initWithObjects:firstView, secondView, firstView, secondView,  nil];

我正在以下列方式添加滚动视图的视图

for ( i = 0 ; i< 5; i++) 
{

    UIView *userView = [classArray objectAtIndex:i];
    CGRect rect;
    rect.size.height = KVIEWHGT;
    float userViewWidth = userView.frame.size.width;
    rect.size.width = userViewWidth;
    userView.frame = rect;
    [scrollView addSubview:userView];
    [userView release];

}

UIView *userView = nil;
NSArray *userSubViews = [scrollView subviews];
CGFloat x = 0;
float userViewWidth = 0.0f;
for (userView in userSubViews) {
    if ([userView isKindOfClass:[UIView class]]){
        CGRect frame = userView.frame;
        frame.origin = CGPointMake(x, 0);
        userView.frame = frame;
        userViewWidth = userView.frame.size.width;
        x += userViewWidth + 10;
    }
}

[scrollView setContentSize:CGSizeMake(x, scrollView.frame.size.height)];

我在滚动视图上只获得两个自定义视图的输出,但我希望滚动视图上应该有5个自定义视图

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:1)

你在数组中多次添加firstView,secondView,即使你多次添加它引用同一个实例

 NSMutableArray *classArray= [[NSMutableArray alloc] initWithObjects:firstView, secondView, firstView, secondView,  nil];

答案 1 :(得分:0)

UIView只能有一个父视图。您多次使用相同的UIView实例。如果您将UIView添加到另一个,它将从当前连接的那个中删除。

阅读UIView类参考,addSubview:

  

视图只能有一个超级视图。如果视图已经具有超视图并且该视图不是接收者,则此方法会在使接收器成为新的超级视图之前删除先前的超视图。

答案 2 :(得分:0)

即使它有效,您也会在滚动视图中看到重复的视图。您必须创建视图的x个实例并将它们添加到滚动视图中。

无论如何,这都是令人毛骨悚然的代码。

1

UIView *userView = [classArray objectAtIndex:i];
[userView release];

你不必释放它,因为它不是你的!

2:为什么在视图上迭代两次?没有意义,更好

NSMutableArray* myArray = [[NSMutableArray alloc] initWithObjects: firstView,secView,thirdView,fourthView]; 

for (UIView* view in myArray)
{ 
     //set the Frame and add it the the ScrollView
}