2011-12-21 4 views
0

я создал один вид прокрутки и на представлении прокрутки, я добавляю два альтернативных пользовательских UIView секДобавление Вид в поле зрения прокрутки

@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 пользовательских представлений в списках прокрутки

Пожалуйста, помогите мне решить эту проблему.

ответ

1

Вы добавляете FirstView, secondView несколько раз в массиве, даже если вы добавите его несколько раз, когда он обращается к одному экземпляру

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

UIView может иметь только один родительский вид. Вы используете один экземпляр UIView несколько раз. Если вы добавите UIView в другой, он будет удален из того, к которому он привязан.

Чтение UIView класса Reference, addSubview:

Представления могут иметь только один SuperView. Если в представлении уже есть супервизор, и это представление не является получателем, этот метод удаляет предыдущий супервизор, прежде чем сделать получателю новый контроль.

+0

Я добавляю все UIView на UIScrollView –

+0

я знаю, но, глядя на массиве "[[NSMutableArray Alloc] initWithObjects: FirstView, secondView, FirstView, secondView, ноль];" вы используете одни и те же экземпляры несколько раз. Вам нужно создать уникальные экземпляры UIView для каждого UIView на экране, они могут быть одного типа/класса. Это означает: * view1 = [FirstView alloc] init], * view2 = [[FirstView alloc] init], * view3 = [[SecondView alloc] init], * view4 = [[SecondView alloc] init] .... и т. Д. – bandejapaisa

0

даже если она работает, вы бы дублируетесь мнения в вашем Scrollview. вам нужно создать x экземпляров ваших просмотров и добавить их в свой scrollview.

это жуткий код в любом случае.

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 
} 
Смежные вопросы