2

私は周りを見回しており、これを行うことについて何も見つけていません。それが可能かどうかもわかりませんが、これが私が達成しようとしていることです。注意してください、私がやろうとしていることの非常に単純化された例を示しています。また、投稿されたコードの類似性はすべて仮説であり、コード構文を修正することを意図したものではありません。これは、同様のタイプの機能を参照することによって必要な最終結果をさらに説明するのに役立つことのみを目的としています。代替方法を提供する前に、概念を理解してください...

そうは言っても、タイトルにあるように、オブジェクトにアクセスできるかどうかを確認しようとしています。ifステートメントを使用せずに、文字列名または変数を介して uilabel を言ってみましょう。たとえば、3 つの uilabes があるとします。

UILabel *label1;
UILabel *label2;
UILabel *label3;

そこから、適切な合成をすべて行います。ある時点で、lett say と int に基づいてラベルを参照したいと思います。

int intNumber = 2;

これが理論的な部分です。名前に一致する int 値を持つラベルのテキストを設定したいと思います。

label(%i, intNumber).text = [NSString stringWithFormat:@"This is Label %i", intValue];

結果は次のようになります...

label2.text = @"This is Label 2";

int 値が 1 の場合、label1 が変更されます。または3の場合、label3が変更されます...

または、ラベルの文字列名を使用して同じプロセスを実行できる場合。

int intValue = 1;

NSString *labelName;

その後、ある時点で

labelName = [NSString stringWithFormat:@"label%i",intValue];

「labelName」を参照してそれを呼び出すことにより、何らかの方法で label1 のテキストを設定します。このようなことができるかどうかについて誰かが提案やコメントを提供できれば、それは大歓迎です。クラスとセレクターを文字列名で参照できることは知っていますが、オブジェクトについてはわかりませんか? 「valueForKey:」がこれを行う方法であるかどうかわかりませんか?

長文で申し訳ありませんが、やりたいことを明確にしたかっただけです。

4

3 に答える 3

7

申し訳ありませんが、私はこれを理解することになりました。「setValue:forKeyPath:」が必要なものであることが判明しました。例として...

たとえば .h

@property (strong, nonatomic) UILabel *label1;
@property (strong, nonatomic) UILabel *label2;
@property (strong, nonatomic) UILabel *label3;

たとえば .m

@synthesize label1, label2, label3;

- (void)someMethod:(int)labelVarInt {

[self setValue:[NSString stringWithFormat:@"This is Label %i", labelVarInt] forKeyPath:[NSString stringWithFormat:@"label%i.text", labelVarInt]];

}

これが、同様のことをする必要がある他の人に役立つことを願っています。

于 2012-04-23T14:04:48.640 に答える
2

ラベルをNSArrayに保存する必要があると思います。そうすれば、インデックスでラベルにアクセスできます。

別のアプローチは、KVCを使用してラベルを取得することです。

于 2012-04-21T17:41:20.960 に答える
2

ケースが単にインデックス付き文字列である場合は、おそらく配列を使用する必要があります。そうでない場合は、イントロスペクションを探しています (この質問を見てください)。

于 2012-04-21T17:37:32.833 に答える