Namnge objekt dynamiskt?

Tråden skapades och har fått 9 svar. Det senaste inlägget skrevs .
1

Kan jag i Objective-C namge objekt dynamisk?
t.ex.
UIButton *button1 =...
UIButton *button2 =...

Ungefär så här: UIButton *button + [myArray objectAtIndex:1] =

Misstänker nej men jag ska skapa x antal knappar som ska ligga i en UIScrollView.
Känns lite dumt att ha x antal unika knappar, för en knapp skapas så här:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
            button.frame = CGRectMake(0, 0, sliderHeight, sliderHeight);
            button.backgroundColor = [UIColor whiteColor];
            NSString *buttonImageName = [NSString stringWithFormat:@"Button%d", i];
            UIImage *buttonBackgroundImage = [UIImage imageNamed:buttonImageName];
            [button setBackgroundImage:buttonBackgroundImage forState:UIControlStateNormal];
            [button addTarget:self action:@selector(getDetail:) forControlEvents:UIControlEventTouchDown];
            [button setTag:i];
            [subview addSubview:button];

Dessa skapas i en for loop.
Jag kan ha gjort ett seriöst tankefel...

Nej de kan du inte. Det kan man i regel inte i något språk utan hur du gör är ganska enkelt

Ps jag svarar via mobilen så det blir kort

Skapa en NSMutableArray som tex heter myArray

Skapa en for loop

I for loopen kan du då ha tex

UIButton *mybutton = ....
[myArray addObject:myButton]

För att sedan nå den utvalda knappen använder du tex om du vill nå den första knappen å ändra dess label

UIButton *temp = [myArray objectAtIndex:0]
[temp setLabel:@"iRuleAtObjectiveC]

Det var som jag trodde. Ska titta mer på det du förslår gotfredson.
Fast lösningen nu blir att skapa x antal unika knappar.

Ursprungligen av Mattias Hedman:

Det var som jag trodde. Ska titta mer på det du förslår gotfredson.
Fast lösningen nu blir att skapa x antal unika knappar.

jag förstår verkligen inte varför du skall ha unika knapapr .. det skall du inte ha ... why why why ?

vill du kunna nå knapparna vid ett senare tillfälle så är det en array som gäller

det enda du behöver göra är

i classen sätta NSMutableArray *buttonarray;

i init av classes initiera din array - > myarray = [[NSMutableArray alloc] init];

sen en for loop

for (int i = 0; i < numButtons; i++)
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, sliderHeight, sliderHeight);
button.backgroundColor = [UIColor whiteColor];
NSString *buttonImageName = [NSString stringWithFormat:@"Button%d", i];
UIImage *buttonBackgroundImage = [UIImage imageNamed:buttonImageName];
[button setBackgroundImage:buttonBackgroundImage forState:UIControlStateNormal];
[button addTarget:self action:@selector(getDetail:) forControlEvents:UIControlEventTouchDown];
[button setTag:i];
[subview addSubview:button];
[myArray addObject:button];
}

Senast redigerat 2012-07-09 11:10

om problemet är att du behöver postionera ut knapparna jämnt i Y axeln tex så kan du göra så här

for (int i = 0; i < numButtons; i++)
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, i * buttonHeight, buttonWidth, buttonHeight);
button.backgroundColor = [UIColor whiteColor];
NSString *buttonImageName = [NSString stringWithFormat:@"Button%d", i];
UIImage *buttonBackgroundImage = [UIImage imageNamed:buttonImageName];
[button setBackgroundImage:buttonBackgroundImage forState:UIControlStateNormal];
[button addTarget:self action:@selector(getDetail:) forControlEvents:UIControlEventTouchDown];
[button setTag:i];
[subview addSubview:button];
[myArray addObject:button];
}

jag brukar ha en regel att aldrig ha samma kod två gånger .. har jag behovet av att skapa flera knappar å knapparna skall vara liknande varandra så gör jag en funktion för att skapa knappen som jag sedan anropar ..

det är bara win win att göra så eftersom du behöver bara gå in å ändra i funktionen för att ändra tex utseendet på alla knappar ..

Det närmaste som du kommer skulle nog vara att använda preprocessorn på något innovativt sätt, alternativt dynamiskt skapa en klass vid runtime som har tillräckligt med instansvariabler och använda dem. Såvitt jag vet finns det inget bra sätt att göra det du försöker åstadkomma. Om du behöver ha kvar referenserna till objekten så är t. ex. en array, set eller dictionary lämpligt.

Tvärtemot skulle jag nog påstå att det ändå finns en hel del språk som har funktionaliteten som du vill använda, men att det inte är alltför vanligt i C-baserade språk. Många "dynamiska" språk har den funktionaliteten. I Tcl kan du t. ex. skriva set button$myArray(1) $x, där button$myArray(1) evalueras först och sedan tilldelas en variabel med det namnet värdet av x.

Senast redigerat 2012-07-09 10:48
Ursprungligen av Marcus K:

så är t. ex. en array, set eller dictionary lämpligt.

Det var ju exakt det jag beskrev ..

Ursprungligen av Marcus K:

Tvärtemot skulle jag nog påstå att det ändå finns en hel del språk som har funktionaliteten som du vill använda, men att det inte är alltför vanligt i C-baserade språk. Många "dynamiska" språk har den funktionaliteten. I Tcl kan du t. ex. skriva set button$myArray(1) $x, där button$myArray(1) evalueras först och sedan tilldelas en variabel med det namnet värdet av x.

sant visserligen

vill du göra den ännu snyggare för dig så kan du skapa en function i din class som heter createCustomButtonWithTagIndex

då kan din for loop se ut som följande

for (int i = 0; i < numButtons; i++)
{
UIButton *button = [self createCustomButtonWithTagIndex: i];
[subview addSubview:button];
[myArray addObject:button];
}

1
Bevaka tråden