0

作成した文字列から (xcode 4.5.2 を使用)

   - (void)viewDidLoad{ 
      myList = [[NSArray alloc] initWithObjects:@"x",@"y",@"z", nil];
      }

そしてもちろん:

@property (strong, nonatomic) IBOutlet UILabel *labelField_x;
@property (strong, nonatomic) IBOutlet UILabel *labelField_y;
@property (strong, nonatomic) IBOutlet UILabel *labelField_z;

IBAction 内で、配列から正しいキーを選択するだけで、使用するラベルを文字列から選択できるようにしたいと考えています。if または BOOL ステートメントを実行して自分自身を繰り返す代わりに。フォームの例私はこれを持っています:

- (IBAction)buttonPressed:(UIButton *)sender;
{
    if (is_x){

        NSString *digit = sender.currentTitle;
            if (!pressedDecimal){
                labelField_x.text = [labelField_x.text stringByAppendingString:digit];
            }else if (count <= 1){
                labelField_x.text = [labelField_x.text stringByAppendingString:digit];
            }
                                      .
                                      .
                                      .
    }
    else if (is_y){

        NSString *digit = sender.currentTitle;     
            if (!pressedDecimal){
                labelField_y.text = [labelField_y.text stringByAppendingString:digit];
            }else if (count <= 1){
                labelField_y.text = [labelField_y.text stringByAppendingString:digit];
            }
                                      .
                                      .
                                      .

    }
    else if (is_z){

        NSString *digit = sender.currentTitle;
            if (!pressedDecimal){
                labelField_z.text = [labelField_z.text stringByAppendingString:digit];
            }else if (count <= 1){
                labelField_z.text = [labelField_z.text stringByAppendingString:digit];
            }
                                      .
                                      .
                                      .
    }
}

ご覧のとおり、場所や UILabel の方向、またはラベル ( labelField_x, labelField_y, labelField_z ) を指しているものを変更するだけでなく、同じコードで毎回自分自身を繰り返します。私の質問は、最後の文字列 (x、y、z) のみを変更し、作成した一連の配列から呼び出して、使用するラベルを伝える方法があるかどうかです。

私はこれを試しましたが、もちろんうまくいきませんし、正しい答えに近いものではありませんが、これが私が望むものをよりよく説明できることを願っています(悪いコーディングについては事前に申し訳ありません):

labelField_@"%@".text,[myList 0]  = [labelField_@"%@".text,[myList 0] stringByAppendingString:digit];

ありがとうございました。

4

1 に答える 1

0

あなたが何をしようとしているのか完全にはわかりませんが、タイピングの手間を省きたい場合は、次のようにしてみてください:

// assign the label you want to use to a local variable

UILabel *selectedLabel;
selectedLabel = nil;
if (is_x) {
    selectedLabel = labelField_x;
} else if (is_y) {
    selectedLabel = labelField_y;
} else if (is_z) {
    selectedLabel = labelField_z;
}

// now work with selectedLabel so you don't have to repeat yourself

if (!pressedDecimal){
    selectedLabel.text = ...

または、IBOutlet プロパティのラベルをディクショナリに貼り付けて、特定の文字 (文字列) の正しいラベルをすばやく取得することもできます。

// create a lookup dictionary (once, e.g. in awakeFromNib)

NSDictionary *labelForCharacter;
labelForCharacter = @{
    @"x" : labelField_x,
    @"y" : labelField_y,
    @"z" : labelField_z
};

 // get the label for "z"

UILabel *selectedLabel;
selectedLabel = labelForCharacter[@"z"];
于 2013-02-19T23:37:25.657 に答える