UIView или UIScrollView не обновляют отображение на программно созданных элементах управления - PullRequest
1 голос
/ 23 марта 2011

Недавно я столкнулся с еще одной проблемой Iphone. Я создаю мелодраматически некоторые элементы управления, и они не появляются, для этого нужен какой-то метод обновления. вот мой макет: enter image description here

это чат, и все эти сообщения я создаю им динамически по мере появления события, то, что я создаю при запуске, оно появляется, но то, что я создаю позже, не отображается, даже если код в порядке,

вот как я создаю элементы управления (вызывая следующую функцию):

- (void) AddNewMessage: (NSString *)msg date1:(NSString* ) date2  {


    NSString *backimage =[NSString stringWithString:@""];
    NSString *who =[NSString stringWithString:@"1"];

        calculatedHeight=floor( msg.length / 40 )*20;
            if (calculatedHeight<30) calculatedHeight=30;
        if ([who isEqualToString:@"1"]) { 
            left=85;
            left_hour_button=25;
            backimage=@"green_bubble.png";
        }
        else {
            left=5;
            left_hour_button=240;
            backimage=@"grey_bubble.png";
        }

        UIButton *button1 = [[UIButton alloc] initWithFrame:CGRectMake(left, lastcalculatedHeight-10, 230, calculatedHeight+10)];   
        [button1 setBackgroundImage:[[UIImage imageNamed:backimage] stretchableImageWithLeftCapWidth:9 topCapHeight:13] forState:UIControlStateDisabled];
        [button1 setEnabled:FALSE];          
        [scrollView addSubview:button1];
        [button1 release];



        UIButton *buttonTime = [[UIButton alloc] initWithFrame:CGRectMake(left, lastcalculatedHeight+40, 50, 20)];  
        [buttonTime setBackgroundImage:[[UIImage imageNamed:@"hour_bubble.png"] stretchableImageWithLeftCapWidth:9 topCapHeight:13] forState:UIControlStateDisabled];
        [buttonTime setFrame:CGRectMake(left_hour_button, lastcalculatedHeight+calculatedHeight-30, 55, 25)];
        [buttonTime setTitle:date2 forState:UIControlStateDisabled];                
        [buttonTime setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled];
        buttonTime.titleLabel.font=[UIFont fontWithName:@"Helvetica" size:8.0]; 
        buttonTime.titleLabel.lineBreakMode= UILineBreakModeWordWrap;
        [buttonTime setEnabled:FALSE];
        [scrollView addSubview:buttonTime];
        [buttonTime release];


        UILabel *labelMessage = [[UILabel alloc] initWithFrame:CGRectMake(left+5, lastcalculatedHeight-5, 220, calculatedHeight)];           
        [labelMessage setText:msg];
        [labelMessage setFont:[UIFont fontWithName:@"Arial" size:12.0]];
        [labelMessage setLineBreakMode:UILineBreakModeWordWrap];
        [labelMessage setTextColor:[UIColor blackColor]];
        [labelMessage setAdjustsFontSizeToFitWidth:NO];
        [labelMessage setNumberOfLines:floor( msg.length / 40 )+2];
        [labelMessage setBackgroundColor:[UIColor clearColor]];
        [scrollView addSubview:labelMessage];
        [labelMessage release];


        lastcalculatedHeight+=calculatedHeight+20;

        totalHeight+=calculatedHeight;  

    scrollView.contentSize = CGSizeMake(240, lastcalculatedHeight);



}

Может кто-нибудь подсказать, как "обновить" дисплей?

scrollView - это объект внутри Uiview, из которого происходит класс

Также я хочу прокрутить вниз прокрутку вниз, каждый раз, когда добавляю новое сообщение.

Я видел этот пост , но иногда он не работает, или он действует странно на симуляторе ... еще не пробовал на устройстве, потому что у меня нет iphone ..

он прокручивает слишком много или вообще, но если я перехожу на другую вкладку, затем переключаюсь назад, прокрутка прокручивается внизу и даже показывает элементы управления, которые я создал программно ... Странно, не правда ли?

1 Ответ

0 голосов
/ 23 марта 2011

Попробуйте использовать [self.view setNeedsDisplay], если self является контроллером представления, или просто [scrollView setNeedsDisplay].

...