iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   UILabel updaten vanuit andere class (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/44659-uilabel-updaten-vanuit-andere-class.html)

Niels2678 28-09-09 14:15

UILabel updaten vanuit andere class
 
Beste iPhonecluppers,

Nog steeds probeer ik mijn kennis te vergroten op iPhone gebied. Ik heb nu mijn eerste iPhoneApp gemaakt. Nu wil ik graag op het tweede view (Tab Bar) de instellingen bepalen. Nu heb ik 2 UITextFields gemaakt op het tweede view en wanneer er op een button wordt er een functie uitgevoerd die doorlinkt naar een ander functie op de MainView.m .. Deze functie zou dus de waardes van de textlabels moeten updaten.

Hieronder een versimpeld voorbeeld:

FirstViewController . h
@interface ... {

IBOutlet UILabel *label1;
IBOutlet UILabel *label2;

}

@property (nonatomic, retain) IBOutlet UILabel *label1;
@property (nonatomic, retain) IBOutlet UILabel *label2;

FirstViewController . m
+ (void) defLabels: (NSString *) naamLabel1: (NSString *) naamLabel2 {

[label1 setText:[NSString stringWithFormat:@"%@", naamThuis]];
[label2 setText:[NSString stringWithFormat:@"%@", naamUit]];

}

SecondViewController . h
@interface ... {
UITextField *inputVeld1;
UITextField *inputVeld2;
}

- (IBAction) stelLabelsIn: (id) sender;

SecondViewController . m

- (IBAction) stelLabelsIn: (id) sender {

[FirstViewController defLabels: [NSString stringWithFormat:@"%@", [inputVeld1 text]]:[NSString stringWithFormat:@"%@", [inputVeld2 text]]];

}

Ik hoop dat ik dit duidelijk genoeg heb uitgelegd en dat iemand mij wil en kan helpen!

Matisse 28-09-09 17:26

Je probeert in een class method (defLabels) instance variables (label1 en label2) te wijzigen. Dit kan niet. Verander de "+" bij defLabels eens in een "-".

Niels2678 28-09-09 21:05

Citaat:

Oorspronkelijk geplaatst door Matisse (Bericht 357841)
Je probeert in een class method (defLabels) instance variables (label1 en label2) te wijzigen. Dit kan niet. Verander de "+" bij defLabels eens in een "-".

Ik heb dit geprobeerd maar dit wil ook niet baten. Hij zegt dan dat de 'FirstViewController' waarschijnlijk defLabels niet zal herkennen. Is r misschien een andere oplossing?

gekkepietje 28-09-09 21:41

Je moet defLabels wel in de interface zetten van FirstViewController, anders snapt een andere class niet dat die functie bestaat.

Niels2678 28-09-09 22:24

Citaat:

Oorspronkelijk geplaatst door gekkepietje (Bericht 358012)
Je moet defLabels wel in de interface zetten van FirstViewController, anders snapt een andere class niet dat die functie bestaat.

ja dit heb ik ook geprobeerd. Met een'-' en een '+' maar bij beide werkt het niet!

Weet iemand toevallig een tutorial te vinden waar wordt uitgelegt hoe het werkt om variablen via een externe class aan te passen? Of een plek waar ik een werkend voorbeeld kan vinden van dit?

JWVD 29-09-09 06:44

Je kan ook je class tijdelijk aanmaken binnen je andere class en dan gewoon de functie uitvoeren (of meteen de variabelen wijzigen).

Code:

PlayerViewController *pvController = [[PlayerViewController alloc] init];
pvController.variable = @"Hoi";
[pvController functie]; //Je kan ook een functie gebruiken
[pvController release];

Of is dat te omslachtig? :P

mutsop 29-09-09 11:47

Kan je niet gewoon met delegates werken en de parameters meegeven?
Of begrijp ik je volledig verkeerd :D

Niels2678 29-09-09 12:29

Citaat:

Oorspronkelijk geplaatst door JWVD (Bericht 358083)
Je kan ook je class tijdelijk aanmaken binnen je andere class en dan gewoon de functie uitvoeren (of meteen de variabelen wijzigen).

Code:

PlayerViewController *pvController = [[PlayerViewController alloc] init];
pvController.variable = @"Hoi";
[pvController functie]; //Je kan ook een functie gebruiken
[pvController release];

Of is dat te omslachtig? :P

Ik heb dit geprobeerd, het veroorzaakt geen waarschuwing of foutmelding. Maar het werkt ook niet? Misschien zien we iets kleins over het hoofd?

Citaat:

Oorspronkelijk geplaatst door mutsop (Bericht 358202)
Kan je niet gewoon met delegates werken en de parameters meegeven?
Of begrijp ik je volledig verkeerd :D

Dit zegt mij niet zo veel, kan je misschien een voorbeeld geven?

mutsop 29-09-09 13:00

Wel met delegates kunt ge pointers naar functies gaan stockeren in een delegatevariabele. Waardoor je eigenlijk, zoals je zelf wilt, een functie oproepen die doorlinkt naar een ander functie.

Hoe dit werkt in objectif C weet ik niet echt. Ik gebruik ze enkel bij .net.

danielpunt 29-09-09 13:25

hoe bekend ben je met Cocoa als delegates je niks zeggen? :confused:

Niels2678 29-09-09 13:31

Citaat:

Oorspronkelijk geplaatst door danielpunt (Bericht 358245)
hoe bekend ben je met Cocoa als delegates je niks zeggen? :confused:

Nog niet zo heel erg, ik heb het boek 'Programming in Objective-C 2.0' gelezen, hier werd niet heel erg in gegaan op Cacoa. Zo te horen is dit dus wel erg van belang. Dan hoop ik of iemand een boek (het liefst nl) kan aanraden waardoor dit een stuk duidelijker wordt?

JWVD 30-09-09 06:23

Citaat:

Oorspronkelijk geplaatst door Niels2678 (Bericht 358221)
Ik heb dit geprobeerd, het veroorzaakt geen waarschuwing of foutmelding. Maar het werkt ook niet? Misschien zien we iets kleins over het hoofd?

Wat had je precies geprobeerd?

Niels2678 30-09-09 10:15

Citaat:

Oorspronkelijk geplaatst door JWVD (Bericht 358613)
Wat had je precies geprobeerd?

Simpelweg dit:
Code:

- (IBAction) stelLabelsIn: (id) sender {
   
    FirstViewController *ClassA = [FirstViewController new];

    ClassA.label1.text = @"Moh!";
    [ClassA release];
   
}


JWVD 30-09-09 20:35

Citaat:

Oorspronkelijk geplaatst door Niels2678 (Bericht 358666)
Simpelweg dit:
Code:

- (IBAction) stelLabelsIn: (id) sender {
   
    FirstViewController *ClassA = [FirstViewController new];

    ClassA.label1.text = @"Moh!";
    [ClassA release];
   
}


Je moet wel [[FirstViewController alloc] init]; gebruiken :P

En gebruik [ClassA.label1 setText:@"Moh!"]; om de text te veranderen ;)

gekkepietje 30-09-09 21:41

Citaat:

Oorspronkelijk geplaatst door JWVD (Bericht 359056)
Je moet wel [[FirstViewController alloc] init]; gebruiken :P

Het lijkt me vrij zinloos om in dezelfde method FirstViewController te alloceren, een text te zetten, en de controller daarna weer te releasen. Waarschijnlijk heb je ergens al een instance van FirstViewController. Zorg dat je een pointer naar dat object hebt, en gebruik die pointer dan om te tekst aan te passen.

Citaat:

En gebruik [ClassA.label1 setText:@"Moh!"]; om de text te veranderen ;)
Mwoah, als text een property is dan is label1.text = @"Moh!"; net zo goed.

JWVD 30-09-09 21:45

Citaat:

Oorspronkelijk geplaatst door gekkepietje (Bericht 359097)
Het lijkt me vrij zinloos om in dezelfde method FirstViewController te alloceren, een text te zetten, en de controller daarna weer te releasen. Waarschijnlijk heb je ergens al een instance van FirstViewController. Zorg dat je een pointer naar dat object hebt, en gebruik die pointer dan om te tekst aan te passen.

Mwoah, als text een property is dan is label1.text = @"Moh!"; net zo goed.

Oh sorry, ben ook nog maar een Obj-C newbie.

gekkepietje 30-09-09 22:38

Citaat:

Oorspronkelijk geplaatst door JWVD (Bericht 359098)
Oh sorry, ben ook nog maar een Obj-C newbie.

Daar hoef je je niet voor te verontschuldigen. ;-) Er is niks mis met een newbie zijn... we moeten het allemaal een keer leren.

Misschien is het handiger als Niels zijn volledige source code ergens uploadt, dan is het gemakkelijker om aan het geven hoe het wel moet. Ik heb namelijk het idee dat sommige basisconcepten nog niet helemaal duidelijk zijn.

Niels2678 01-10-09 08:57

Ja ik kan inderdaad wel de hele source online gooien, was toch geen plan om dit echt te distrubeteren.

Het gehele project is hier te vinden. De bedoeling van de app is dat het de tijd en score bijhoudt van een wedstrijd. Op het tweede tab wilde ik de instellingen zetten, zoals de tijd en de teams die spelen. Ik hoop deze uitleg de app wat duidelijker maakt en dat iemand mij kan wijzen op de fouten die ik heb gemaakt.

Trouwens top, dat mensen blijven reageren en mij opweg willen helpen!!!:D

Niels2678 05-10-09 11:42

Haha nu heb ik mijn project gepubliceerd en dan reageerd er niemand meer. Is er toch nog iemand die een poging zou willen wagen, mij te helpen?


Alle tijden zijn GMT +2. Het is nu 18:21.