0

タグ値でダイナミックUILabelを作成しましたが、タグ値のない同様の種類の他のラベルがあります。

タグ値のラベルのみにアクセスしたいのですが、ラベルのテキスト値にアクセスできませんでした。

これが私のコードです。

 Dynamic created Label
     for (int i= 0; i < [array count]; i++) {
        UILabel *defaultLbl = [[UILabel alloc] initWithFrame:CGRectMake(30, 70, 60, 21)];
        defaultLbl.text = @"Default";
        defaultLbl.backgroundColor = [UIColor clearColor];
        defaultLbl.textColor = [UIColor colorWithRed:51.0/255.0 green:51.0/255.0 blue:51.0/255.0 alpha:1.0];
        [defaultLbl setFont:[UIFont fontWithName:@"Helvetica" size:12]];
        defaultLbl.textAlignment = NSTextAlignmentCenter;
        defaultLbl.tag = i+1;
        [myButton addSubview:defaultLbl];
        [defaultLbl release];

        UILabel *masterProName = [[UILabel alloc] initWithFrame:CGRectMake(28, 20, 200, 21)];
        masterProName.text = [masterProjListArray objectAtIndex:i];//@"Lorem Ipusum";
        masterProName.backgroundColor = [UIColor clearColor];
        masterProName.textColor = [UIColor colorWithRed:51.0/255.0 green:153.0/255.0 blue:204.0/255.0 alpha:1.0];
        [masterProName setFont:[UIFont fontWithName:@"Helvetica-Bold" size:17]];
        masterProName.lineBreakMode = NSLineBreakByCharWrapping;
        [myButton addSubview:masterProName];
        [masterProName release];

        UILabel *masterProID = [[UILabel alloc] initWithFrame:CGRectMake(28, 45, 200, 21)];
        masterProID.text = [masterProjIDArray objectAtIndex:i];//@"133 FS";
        masterProID.backgroundColor = [UIColor clearColor];
        masterProID.textColor = [UIColor colorWithRed:51.0/255.0 green:51.0/255.0 blue:51.0/255.0 alpha:1.0];;
        [masterProID setFont:[UIFont fontWithName:@"Helvetica" size:17]];
        masterProID.lineBreakMode = NSLineBreakByCharWrapping;
        [myButton addSubview:masterProID];
        [masterProID release];
    }

ユーザーUILabelがボタンを長押しした後のアクセス方法

- (void)longPressTap:(UILongPressGestureRecognizer *)sender
         {
          if ([recognizer.view tag]) {
                        UILabel *view = (UILabel *)recognizer.view;
                    NSLog(@"---%@", view.subviews);

                    for (UILabel *lbl in view.subviews) {
                        if (recognizer.view.tag == view.tag) {
                            NSString *text = view.text;
                            NSLog(@"---%@", text);
                        }
                    }
            }
        }

ここにログを入れています

"<UIImageView: 0x75b9510; frame = (0 0; 379 100); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x75acef0>>",
            "<UILabel: 0x88c4e50; frame = (28 20; 200 21); text = 'Aux Water Waste Trtmnt'; clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x88c49c0>>",
            "<UILabel: 0x88c52f0; frame = (28 45; 200 21); text = 'M10000'; clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x88c5380>>",
            "<UILabel: 0x88c56c0; frame = (30 70; 60 21); text = '**Default**'; clipsToBounds = YES; userInteractionEnabled = NO; tag = 1; layer = <CALayer: 0x88c5750>>",
            "<UIButton: 0x88c6440; frame = (240 10; 70 80); opaque = NO; userInteractionEnabled = NO; tag = 1; layer = <CALayer: 0x88c6500>>"

このログでは、「デフォルト」のテキスト ラベルのみにアクセスしたい

これについて何か提案をください。

4

5 に答える 5

1

実行時にそれらのアウトレットを作成することもできます。

配列を作成し、各ラベルのアウトレットを追加します。

完了してそれらを取得する必要がある場合は、配列のインデックスから簡単にアクセスできます。

アウトレットを保存するための辞書を作成することもできますが、ここではキーでラベルにアクセスできます。

于 2013-03-05T12:24:31.820 に答える
1

さて、あなたはそのタグがそのテキストに「デフォルト」を含むラベルのどの値を持っているかを知る必要があります。42だとしましょう。

UILabel *label = [view viewWithTag:42];

トリックを行います。とにかく、あなたのソリューションも機能するはずです。扱っている実際のタグ値を見てください。私は、recognizer.view.tagが「デフォルト」を含むラベルのタグと同じ値を持っていないという直感を持っています。

于 2013-03-05T12:22:09.617 に答える
0

タグをに割り当てているので、タグUILabelからラベルを取得できます(わかっている場合は、知っています)。

だから、この方法で試してみてください

    for (int i = 0 ; i <[array count]; i++)
    {
        UILabel *lbl = (UILabel*)[self.view viewWithTag:i+1];
        NSLog(@"--- %@", lbl.text);
    }
于 2013-03-05T12:20:56.380 に答える
0

UILabelそのに基づいて取得しますTag

を取り込んint i;で、上に.h file入れfor ループi=1;

for (NSObject *view in self.View.subviews) 
{
    if ([view isKindOfClass:[UILabel class]]) 
    {
        label = (UILabel *)[[self view] viewWithTag:i];
        NSLof(@"%@".label.text);
       // break;
    }
  i++;
}
于 2013-03-05T12:29:38.640 に答える
0

まず、チェックする必要があります

 if (lbl.tag == view.tag)

いいえ

if (recognizer.view.tag == view.tag)

第二に、とにかくうまくいきません。それは、あなたが知っている触れられたビューを特定することだけです。欲しいラベルのタグ値をユニークな番号に設定してテストしてみてはいかがでしょうか

if (lbl.tag == <unique tag number>)
于 2013-03-05T13:32:08.423 に答える