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/)
-   -   Verbinding tussen 2 viewcontrollers (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/56333-verbinding-tussen-2-viewcontrollers.html)

Geno 22-03-10 15:00

Verbinding tussen 2 viewcontrollers
 
Ik ben bezig met een utility app. Ik gebruik de FlipSideView template met een MainViewController en een FlipSideViewController.

De FlipSideView is de settings view van mijn applicatie. Ik gebruik hiervoor een UISegmentedControl om te switchen tussen 2 instellingen. De bedoeling is dat een label in de MainViewController 2 verschillende type waardes laat zien, afhankelijk van wat de gebruiker heeft gekozen met de SegmentedController.

Nu is mijn vraag, hoe krijg ik zover dat de SegmentedController in de FlipSideView invloed kan uitoefenen in de MainView?
Waar zet ik de objecten, in welke class? Ik declareer de outlets in FlipSideViewController.h. Ik neem aan dat ik dan in de MainViewController.m de FlipSideViewController.h importeer. Moet ik in de *.m class ook de code zetten van de SegmentedController (dus dat die waardes veranderen in de label)?

Eigenlijk kan ik ook een algemene vraag stellen. Hoe zorg je er eigenlijk voor dat objecten en IBOutlets van de ene view in de andere view werken? De compiler herkent de outlets niet.

Coppes 22-03-10 15:41

Momenteel kan ik niet direct sample code aan je geven maar dit kan je wel mogelijk maken door de Delegate van de flipsideviewcontroller af te leggen bij je mainviewcontroller, op deze manier kan je een functie oproepen in je mainviewcontroller die de waarde's invoerd.

Frog 22-03-10 17:55

Wat Coppes zegt kan inderdaad, maar er is een betere en makkelijkere manier. Je zegt dat op "de achterkant" de instellingen staan. Die moeten toch ook bewaard worden als je de applicatie afsluit? De manier die Coppes doet, doet dat niet, maar je kan dat wel op de volgende manier doen.

Je leest de waardes op "de achterkant" uit wanneer ze veranderen, en wanneer dat gebeurd bewaar je het. Je bewaart het d.m.v. NSUserDefaults (zoek daar maar eens op in Google of op de Apple site). Telkens wanneer de voorkant tevoorschijn komt (implementeer: ViewWillAppear) lees je die waarde dan uit.

Dit is (vind ik) makkelijker, maar ook beter, omdat de waarde bewaard blijft.

Geno 22-03-10 20:25

Bedankt voor de reacties.

Ik heb al wat code geschreven dat de instellingen bewaard worden via NSUserDefaults. Dat gaat prima.

Enige wat ik nog niet weet is hoe ik ervoor kan zorgen dat de instellingen worden doorgegeven aan 'de voorkant'. Wat me zelfs niet lukt is om bv. een button, die aan 'de achterkant' zit, iets te laten doen op 'de voorkant'.
Ik ga even kijken naar jullie ideeën.

wubbe 23-03-10 08:45

Wat Frog bedoelt is dat je de instellingen aan de 'achterkant' in NSUserDefaults zet en ze aan de 'voorkant' weer ophaalt.

Maar... er is nog een manier.

Je kunt ook flipsideControllerDidFinish in de MainViewController implementeren. Die gaat af als je weer van de 'achterkant' naar de 'voorkant' gaat. Hier kun je waarden van de ene naar de andere kopiëren.

Voorbeeld:
Code:

- (void)flipsideViewControllerDidFinish: (FlipsideViewController *)controller {
    [self dismissModalViewControllerAnimated:YES];       
    propertyAanDeVoorkant = [controller propertyAanDeAchterkant];
}

En die property aan de achterkant kan gewoon een UISegmentedControl zijn natuurlijk

Geno 25-03-10 04:11

Bedankt voor jullie reacties. Het is gelukt. Ik gebruikte het idee van Frog om in de MainViewController de waarde (de integer van UISegmentedControl) uit de .plist te halen met NSUserDefaults.

Alleen werkte viewWillAppear niet. Er gebeurde niks. Dus gebruikte ik flipsideViewControllerDidFinish en daarmee werkte het prima.

Frog 25-03-10 16:46

Ik denk toch dat je beter ViewWillAppear, omdat die ook wordt aangeroepen wanneer je de applicatie opent en niet alleen maar als je van de achterkant naar de voorkant gaat.

Heb je echt het volgende neergezet?
Code:

-(void)viewWillAppear:(BOOL)animated
Zo ja, dan zou ik even naar dit topic kijken, misschien lost dat het probleem op.

wubbe 25-03-10 16:50

Heeft geen zin meer. Ik snap het al.

Geno 26-03-10 00:24

Ja ik had dat zo neergezet en de compiler gaf ook geen error. In dat andere topic staan wel goede suggesties om het werkend te krijgen. Bedankt.

Om ook de instelling terug te halen als de applicatie wordt geopend, gebruik ik viewDidLoad.

Frog 26-03-10 20:12

Dat werkt idd ook, maar dan moet je je code wel op twee plaatsen neerzetten. Dat is bij ViewWillAppear niet meer nodig. :)


Alle tijden zijn GMT +2. Het is nu 06:11.