Uitlezen 'variabelen' tussen 'views' discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Wellicht is het supersimpel, maar kan iemand mij vertellen hoe je waardes vanuit verschillende views kan benaderen? Voorbeeld: ik heb een rootViewController die een instantie ...
|
Registreer | FAQ | Ledenlijst | Kalender | Berichten van vandaag | Zoeken |
#1
|
||||
|
||||
Uitlezen 'variabelen' tussen 'views'
Wellicht is het supersimpel, maar kan iemand mij vertellen hoe je waardes vanuit verschillende views kan benaderen?
Voorbeeld: ik heb een rootViewController die een instantie van 'settingsViewController' initialiseert en een instantie van 'uitleesViewController' heeft. Nu wil ik de waarde, stel, een naam in een UITextField die ik in settingsViewController heb ingevoerd, uitlezen / tonen in bijvoorbeeld een UILabel in uitleesViewController. De views kunnen elkaar uiteraard niet direct aanroepen omdat het instancies zijn die geinitieerd zijn vanuit mijn rootViewController, dus neem ik aan dat het via de rootViewController gaat..of sla ik de plank nu mis? Op iphonedevsdk ben ik wel soortgelijke vragen ook tegengekomen, maar daar kwam ik niet echt mee weg. Alvast bedankt voor diegenen die mij mijn 'oh ja, doh! dat ik zo stom ben dat ik dat niet zie!' moment geeft. EDIT: Na gisteravond gespeeld te hebben blijkt, als ik het goed heb, te gaan middels een UIApplication-class die je in je views include, en instantieert via UIApplication *mijnDelegates = [[UIApplication sharedApplication] mijnDelegates]; Hierin definieer je dan je 'globale variabelen' zodat elke view middels deze 'delegate' ze kan benaderen. Laatst gewijzigd door Malork; 03-04-09 om 10:13. |
|
|
Gesponsorde links (verdwijnt na registratie)
|
#2
|
||||
|
||||
Zo kun je het oplossen idd. Je kunt ook zorgen dat je uitleesViewController van de settingsViewControler weet. Dus je kunt bijvoorbeeld in de settingsViewController een attribuut uitleesViewController geven en deze tijdens het initialiseren zetten. Dan kun je altijd bij je uitleesViewController vanuit je settingsViewController zonder dat je dit via de sharedApplication hoeft te doen.
|
#3
|
||||
|
||||
toch? ik dacht dat dat niet ging omdat beide Controllers vanuit de rootController geinstantieerd werden. Volgens mij had ik dat ook al eens geprobeerd maar werkte het niet omdat bijvoorbeeld uitleesViewController een nieuwe instance maakte van settingsViewController; dan heb ik dus blijkbaar iets verkeerd gedaan...
|
#4
|
||||
|
||||
Ik doe het als volgt:
- Mijn eerste view is een Table View, onder function tableView didSelectRowAtIndexPath DetailerViewController *dvController = [[DetailerViewController alloc] initWithNibName:@"DetailerView" bundle:[NSBundle mainBundle]]; dvController.selectedCountry = storyLink; dvController.selectedHalte = storyHalte; dvController.selectedPostal = storyPostal; dvController.selectedPrepre = storyPrePre; [self.navigationController pushViewControllervController animated:YES]; [dvController release]; dvController = nil; In mijn tweede View het volgende; @synthesize selectedCountry; @synthesize selectedHalte; @synthesize selectedPostal; @synthesize selectedPrepre; Tevens declare ik ze in de header file Geen idee of dit hierboven al beknopt benoemd was, just my 2 cents.
__________________
iPhone (web) developer. Kijk op http://www.appsstore.nl voor alle Nederlandse iPhone apps! Twitter? klik! |
#5
|
|||
|
|||
Kijk anders ook eens naar "key-value observing". Je registreert je dan zogezegd voor notificaties die gestuurd worden als die bapaalde variabele wijzigt, zo verklein je ook de interface tussen beide controllers.
|
#6
|
||||
|
||||
Werkt key value observing ook op de iPhone dan? Dat zou interessant zijn (dacht dat dit alleen met Mac OSX werkte).
In ieder geval iedereen bedankt; ik weet nu dat ik niet helemaal verkeerd zat en dat er verschillende methodes zijn (en Sossie, bedankt voor je voorbeeld!). Dat worden weer late dagen dit weekend! Laatst gewijzigd door Malork; 03-04-09 om 15:03. |
#7
|
||||
|
||||
Ik ben nog niet met multiple views aan de slag geweest, maar kun je niet gewoon een connectie leggen tussen rootViewController en settingsViewController, deze #import'en in settingsViewController en zo een outlet in rootViewController benaderen?
|
#8
|
||||
|
||||
nou, je hebt eigenlijk 3 viewcontrollers: een rootViewController, een settingsViewController en een uitleesViewController. rootVC instantieert de andere 2 controllers en regels het switchen tussen deze 2 views.
Als je dus settingsViewController in uitleescontroller import en instantieert, maak je dus een nieuwe instance (object) met zijn eigen runtime-variabelen, dus dat werkt niet (althans, in PHP niet...). Daarom zei ik al: misschien is het heel eenvoudig en zie ik iets over het hoofd, want in eerste instantie had ik jouw idee ook in gedachte, maar dat werkt (als je nadenkt over de basis OOP) niet, maargoed, Objective-C heeft me wel vaker verrast. |
#9
|
||||
|
||||
Kan settingsViewController de instance van rootViewController dan niet benaderen? In dat geval kan settingsViewController toch gewoon [rootViewController uitleesViewController] lezen via een outlet?
Ik refereer aan de switching views video tutorial. Laatst gewijzigd door Thaurin; 03-04-09 om 16:26. |
#10
|
||||
|
||||
Citaat:
Met dat sharedApplication komt het nagenoeg in de buurt wat jij bedoelt maar dat is programmatig. |
#11
|
||||
|
||||
Als settingsViewController en uitleesViewController in dezelfde xib staan, en hun views worden geplaatst op de view van rootViewController, kun je in IB toch gewoon outlets tussen de verschillende view controllers maken? En aangezien rootViewController instanties van settingsViewController en uitleesViewController bevat, kun je hier toch gewoon outlets voor maken? Zodat je een connectie kunt maken in IB tussen rootViewController en settingsViewController? En dan dus uitleesViewController kan benaderen in settingsViewController?
Een hoop vragen, maar misschien is de structuur van jouw applicatie compleet anders of heb ik het helemaal fout. |
#12
|
||||
|
||||
Oef mijn hoofd duizelt ervan maar alle views zijn aparte XIB-files. Dat idee had ik ook zo'n beetje inderdaad, echter als je straks een applicatie hebt met misschien wel 10 views, dan krijg je een wirwar, lijkt me, maar het is zeker het proberen waard en zou best wel eens ergens van toepassing kunnen zijn.
Ik bedoelde eigenlijk met mijn OP meer iets wat vergelijkbaar is met bijvoorbeeld globals of sessievariabelen in PHP, die 'zweven' en zijn door elke class te benaderen. mijn hoofd duizelt ervan Laatst gewijzigd door Malork; 03-04-09 om 17:07. |
#13
|
||||
|
||||
Aha, de video die ik linkte maakt dus geen aparte XIB voor iedere view. Hij zegt dat hij dit voor kleinere apps fijner vindt, maar grotere apps werken efficienter met aparte XIBs, aldus de goede man.
Ik ga hier thuis even mee puzzelen. |
#14
|
||||
|
||||
Oh de video had die je postte had ik niet gezien (de link) via de iPhone; nu wel. zeker interessant om eens naar te kijken.
op iPhonedevSDK staat ook een mooie video, met daaronder een link naar een HQ-versie, maar die is er niet meer en de kwaliteit is te belabberd om er iets uit te halen. Ik zal eens vragen daar of deze video gerepost kan worden. |
#15
|
|||
|
|||
|
#16
|
||||
|
||||
Citaat:
Wat betreft key-value observing, ik heb dat eens een keer gezien in een keynote. Zo kun je een control koppelen aan een ander object, en als de waarde (bijvoorbeeld een slider) veranderd, veranderd een waarde in het object automatisch mee. Weinig code, snel in elkaar gezet. Klinkt erg leuk, alhoewel er mensen zijn die zweren dat we zo snel mogelijk van Interface Builder af moeten en zo veel mogelijk in code moeten doen. |
#17
|
||||
|
||||
Citaat:
de link naar dat wat ik bedoelde op iphonedevsdk is Multiple XIB how-to - iPhone Dev SDK Forum de HD-versie doet het nu wel weer blijkbaar, maar moet je een vimeo-account hebben. de in-post movie is slecht, maar daaronder staat een link naar een wel goed zichtbaar bestand: iPhone Tutorial - Multiple XIB files on Vimeo ...al met al weer genoeg om te lezen / zien / doen, en dit is nog maar één aspect van wat ik allemaal wel niet zou willen weten. Ik moet mezelf maar weer eens gaan afremmen geloof ik |
#18
|
||||
|
||||
Bedankt, gelijk effe kijken. Ik ga het uitproberen en kom erop terug. De HD versie deed het trouwens gewoon zonder account.
Ik denk dat het op een gegeven moment ineens zal afremmen, zodra bepaalde zaken gaan overlappen en alles zo'n beetje op z'n plaats valt. Dit uiteraard pas na eerst zelf veel te hebben geëxpirimenteerd. Laatst gewijzigd door Thaurin; 03-04-09 om 19:50. |
#19
|
||||
|
||||
Het is me net op de manier gelukt zoals iDeveloper al beschreef; eigenlijk logisch want in PHP (sorry voor als ik het steeds vergelijk...) doe je het ook zo.
Wat doe ik: ik heb: - een rootViewController - een settingsViewController - een uitleesViewController in de uitleesViewController staat in de .h file: @class settingsViewController met vervolgens een declaratie: settingsViewController *settingsVC; @property (nonatomic, retain) settingsViewController * settingsVC in de .m-file synthesize ik settingsVC en #import ik de settingsViewController.h deze uitleesVC synthesize ik ook in de .m-file uiteraard. tijdens starten van de applicatie laad rootViewController de settingsViewController en toont deze. Op dit moment kun je dus in settingsViewController je settings doen. Wanneer ik op een button druk (die verbonden is met een IBOutlet in rootViewController) wordt mijn uitleesViewController geladen. Nadat ik deze heb geinstantieerd passeer ik de pointer die rootViewController heeft voor de settingsViewController naar de uitleesViewController's settingsVC met: [uitleesVC setSettingsVC:self.settingsVC]; Ik hoop dat het een beetje duidelijk was; gelukkig zijn er dus diverse manieren om gegevens uit te lezen uit andere controllers. |
#20
|
||||
|
||||
Aha, dus zodra rootViewController de message krijgt om de views te switchen, geef je gelijk settingsViewController door aan die nieuwe view (uitleesViewController). Ik moet het zelf even proberen om het te solidificeren (in het Engels klinkt dat woord beter :/), maar ik snap de bedoeling.
|
Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten) |
|
Soortgelijke discussies |
||||
Discussie | Auteur | Forum | Reacties | Laatste bericht |
NSURLConnection webpagina uitlezen | bluecola | Ontwikkelen voor iOS | 2 | 02-05-11 16:07 |
bluetooth telefoonboek uitlezen | damnet | iPhone accessoires en onderdelen | 0 | 27-10-09 20:23 |
meerdere views in landscape | Tim14ww | Ontwikkelen voor iOS | 0 | 17-10-09 00:47 |
Views... | JWVD | Ontwikkelen voor iOS | 4 | 28-11-08 14:20 |
Tab bar, meerdere views | BadSide | Ontwikkelen voor iOS | 1 | 22-09-08 05:35 |
|
|