3

簡単だと思われることが 2 つありますが、簡単だと思いますが、これは初めての Objective-C プログラムなので、ネイティブ Perl のように簡単にはいきません。両方の例はほとんど同じですが、使用し@synthesizeているので非常に異なる可能性があると考えています。

例 1

// What Works
@synthesize display0 = _display0;
@synthesize display1 = _display1;
@synthesize display2 = _display2;
@synthesize display3 = _display3;

// What I would like to do:
for (int i=0; i<4; i++)
{
    @synthesize display$i = _display$i;
}

例 2

// Works
- (IBAction)clearPressed
{
    self.display0.text = @"0";
    self.display1.text = @"0";
    self.display2.text = @"0";
    self.display3.text = @"0";
}

// What I would like to see
- (IBAction)clearPressed
{
    for (int i=0; i<4; i++) {
        self.display$i.text = @"0";
    }
}

私を正しい方向に導く助けは素晴らしいでしょう!

4

6 に答える 6

13

UILabel を使用している場合は、これを試してみてください。

@property (nonatomic, retain) IBOutletCollection(UILabel) NSArray *valueFields;


- (IBAction)clearPressed
{
    for(UILabel *label in valueFields)
    {
        label.text = @"0";
    }
}
于 2012-12-27T14:19:48.660 に答える
9

IBOutletCollection を使用するだけです。

@property (strong) IBOutletCollection(UILabel) NSArray *labels;

次に、高速列挙を使用してループできます。

UILabel *label;
for (label in labels) {
    label.text = @"0";
}
于 2012-12-27T14:14:47.267 に答える
4

1 つの方法は-valueForKey、渡されたプロパティ名の値を取得する を使用することです。と組み合わせると、+stringWithFormat次のようなことができます。

for (int i = 0; i < 4; i++) {
    NSString *key = [NSString stringWithFormat:@"display%i",i];
    UILabel *label = [self valueForKey:key];
    label.text = @"";
}

ただし、配列の使用を検討する必要があります。インターフェイス ビルダーでラベルを作成する場合は、IBOutletCollection.

//Connect to every label (.h)    
@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *displays;

//Use a fast enumeration to clear every label
for (UILabel *label in self.displays) {
    label.text = @"";
}
//Setting one labels text from an array
[(UILabel *) self.displays[numberOfLabel] setText:@"text"];
于 2012-12-27T15:16:48.967 に答える
0

なぜ配列を使用しないのですか?

@property (nonatomic, strong) NSMutableArray *display;

@synthesize display;

- (IBAction)clearPressed
{
    for (int i=0; i<4; i++) {
        [self.display setObject:@"0" atIndexedSubscript:i];
    }
}
于 2012-12-27T14:12:50.240 に答える
0

例 1 については、@synthesize を必要としない最新バージョンの Xcode を使用している場合は、自動的に行われます。

例 2-- あなたがやりたいことが Objective-C のように可能だとは思いません (H2CO3 は彼の答えで私が間違っていることを証明しました)。 UITextFields と、以下を使用してそれらを単純にループします。

for(UILabel *lbl in lblArray)
{
    lbl.text = @"0";
}

または、UIViews サブビューを反復処理して、そのようにすることもできます。

for(UIView *view in self.view.subviews)
{
    if([view isKindOfClass:[UILabel class]])
    {
        UILabel *lbl = (UILabel *)view;
        lbl.text = @"0";
    }
}
于 2012-12-27T14:15:22.207 に答える
0

キー値の監視を使用する

for (int i=0; i<4; i++) {
     [self setValue:@"0" forKeyPath:[[NSString alloc] initWithFormat:@"display%i", i]];
}
于 2012-12-28T10:02:31.603 に答える