2011-08-01 13 views
0

UIButtonにラベルを挿入しています。addSubViewiphone:書き込み時のラベル値。

ラベルの値は毎回変更されます。

UILabel *backTopLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 448, 66)]; 
    backTopLabel.backgroundColor = [UIColor clearColor]; 
    backTopLabel.textColor = [UIColor whiteColor]; 
    backTopLabel.font = [UIFont fontWithName:@"Georgia" size:56]; 
    backTopLabel.textAlignment = UITextAlignmentCenter; 

    backTopLabel.text = [[selectedUsers objectAtIndex:userIndex] valueForKey:@"FirstName"]; // UserIndex will be change and new data will be load in the label 


    [btnBackLeftCard addSubview:backTopLabel]; // btnBackLeftCard is the UIButton 
    [backTopLabel release]; 

問題は次のとおりです。ラベル値は正常に変更されますが、上書きされます。

新しいラベルの値が古いラベルの値よりも高くなっています。

どうすればこの問題を解決できますか?あなたが唯一のサブビューを持っていると仮定すると

+0

を使用しますが、このコードのブロックにあなたがラベルを変更するたびに実行していますか? – JonB

+0

はい毎回このコードを実行しています。 – Devang

+0

新しいテキストを追加する前にこの行を追加してください: ** backTopLabel.text = @ ""; ** backTopLabel.text = [[selectedUsers objectAtIndex:userIndex] valueForKey:@ "FirstName"]; // UserIndexが変更され、新しいデータがラベルに読み込まれます。また、それを再度割り当てないでください。一度やり直してください。あなたの財産をより良くするか、 – rptwsthi

答えて

4

を呼び出すたびに[[UILabel alloc] initWithFrame:CGRectMake(0, 30, 448, 66)]あなたが既存のメモリにアクセスしていない、新しいメモリを作成している使用することができますUIButtonに挿入されます。

だから、あなたはそれが存在しない場合にのみ、メモリを作成するよう

if(!backTopLabel) 
    backTopLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 448, 66)]; 

のようなものを持っている必要があります。

あなたのラベルはプロパティではないので、あなたは本質的にそれにアクセスできなくなります。 ラベルを追加する必要があります。表示されているクラスのプロパティとしてラベルを追加する必要があります。再度参照できるように、&を削除してください。それは、このように再び見つける&

タグ:

for(UIView* labelView in btnBackLeftCard.subviews) 
{ 
    if(labelView.tag = 100) 
     [labelView removeFromSuperView]; 
} 

UILabel *backTopLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 448, 66)]; 
backTopLabel.backgroundColor = [UIColor clearColor]; 
backTopLabel.textColor = [UIColor whiteColor]; 
backTopLabel.font = [UIFont fontWithName:@"Georgia" size:56]; 
backTopLabel.textAlignment = UITextAlignmentCenter; 

//here is where you tag the view, so you can find it again 
backTopLabel.view.tag = 100; 

backTopLabel.text = [[selectedUsers objectAtIndex:userIndex] valueForKey:@"FirstName"]; 

[btnBackLeftCard addSubview:backTopLabel]; // btnBackLeftCard is the UIButton 
[backTopLabel release]; 
+0

すばらしい答え。ありがとう – Devang

+0

ありがとう。ラベルを自分で作成することをおすすめしますが、それはあなた次第です。どちらもうまくいく。 –

1

はあなたが

for(UILabel *lblViews in [btn subviews]) //Remove all subviews which are labels under button first if any 
{ 
     if(lblViews.tag == sometagno) //Compare tag number and remove only if that label found. 
       [lblViews removeFromSuperview]; 
} 

backTopLabel.tag = sometagno; //Assign some tag number while adding. 
[btnBackLeftCard addSubview:backTopLabel]; //Than Add your subview 
+0

ボタンイメージを削除してください!他のアイデア? – Devang

+0

以下のように、あなたは同じタグを使用できます。まだ解決策が見つからない場合は、私の更新されたアイデアを参照することができます。 –

+0

ありがとうございました – Devang

0

これは基本的にビューがあなたのケースでは、それが複数回追加されています。..別のビューのサブビューとして追加される場合に発生します。

UILabelを1つ作成し、それをテキストプロパティに変更するだけです。

あなたの場合は、複数回作成して、前のものの上に追加しています。

または以前に1を作成して再利用することはできません場合は、最新の追加スーパービューからそれを削除してください。..

0

は、私はあなたが再びサブビュー(UILabel)を追加していると思います。 あなたはUILabelのテキストのみを変更する必要があります

0

私はCOCOS2Dで働いています。あなたがグローバルラベル名を宣言した場合、

[labelName removeFromParentAndCleanup:YES]

関連する問題