0

私はチャットのような次のアプリを持っているので、プログラムでいくつかのラベル、画像、ボタンを作成しています。
問題は、起動時に追加したものが表示され、後で追加したものが表示されないことです。
ビューをリフレッシュする必要があるようなものです。ボタンに設定されたIBActionから同じ描画関数を呼び出すと...コンテンツが表示されます。新しいイベントを探してクラスに通知するスレッドイベントからのものである場合:

[[NSNotificationCenter defaultCenter] postNotificationName:@"NewMessageNotification" object:self userInfo:values];  

その後、何も表示されません。しかし、関数は実際に呼び出されます(デバッガーで確認しました)ビューの適切なインスタンスを使用していない可能性がありますか?

これが私のレイアウトです:

ここに画像の説明を入力してください

これが、コントロールを作成する私の関数です。

    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];


    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];

また、この関数を呼び出すときにuiscrollviewを下に自動スクロールしたいのですが、失敗します。次の関数を呼び出すと、シミュレーターがおかしくなりそうです。

CGPoint offset = CGPointMake(0,lastcalculatedHeight);
[scrollView setContentOffset: offset animated: YES];

これは UIScrollViewからプログラムで一番下までスクロールして取得しました

4

1 に答える 1

0

説明する動作は、通知がメインスレッドで送信されていないように聞こえます。すべてのUI更新は、メインスレッドで実行する必要があります。問題を回避するためのコードについては、他の質問に対する私の回答を参照してください。

于 2011-03-26T19:01:34.293 に答える