ModalViewController informatie doorgeven, argh!?! discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Ik heb een iPad app met een ModalViewController, om precies te zijn een UIModalPresentationFormSheet, hierin staat een UITableView. Als ik een rij selecteer (didSelectRowAtIndexPath) dan ...
|
Registreer | FAQ | Ledenlijst | Kalender | Berichten van vandaag | Zoeken |
#1
|
|||
|
|||
ModalViewController informatie doorgeven, argh!?!
Ik heb een iPad app met een ModalViewController, om precies te zijn een UIModalPresentationFormSheet, hierin staat een UITableView. Als ik een rij selecteer (didSelectRowAtIndexPath) dan stuurt hij de info naar de view erachter (omdat het een FormSheet is). Die info krijg ik binnen via een method:
De PopOverView.m met de tabel erin: Code:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { SecondViewController *viewController = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease]; [viewController doTab:indexPath]; NSLog(@"Selected Tab: %i", [indexPath row]); [self dismissModalViewControllerAnimated:YES]; } Code:
- (void)doTab:(NSIndexPath *)index { NSLog(@"INDEX: %i", [index row]); tabTitle.text = @"Selected Tab: %i", [index row]; } Heeft er iemand een idee waarom? |
|
|
Gesponsorde links (verdwijnt na registratie)
|
#2
|
|||
|
|||
Probeer dit eens
Niet zo (dat geeft geen compilerfout??):
Code:
- (void)doTab:(NSIndexPath *)index { NSLog(@"INDEX: %i", [index row]); tabTitle.text = @"Selected Tab: %i", [index row]; } Code:
- (void)doTab:(NSIndexPath *)index { NSLog(@"INDEX: %i", [index row]); tabTitle.text = [NSString stringWithFormat:@"Selected Tab: %d", [index row]]; }
__________________
Leon [iPhone- en Java ontwikkelaar] Laatst gewijzigd door wubbe; 21-04-11 om 09:23. |
#3
|
|||
|
|||
Dat geeft geen verschil, okal zou ik gewoon een NSString neerzetten zonder die index row erbij veranderd hij niet. Het lijkt wel alsof mijn method de IBOutlet niet mag updaten ofzo?
Kan het zijn dat de view nog niet helemaal afgeladen is als de method al geroepen wordt? De method wordt namelijk aangeroepen in PopOverView.m waarna deze weer verborgen wordt. |
#4
|
||||
|
||||
Geef je t label tekst wel door aan de andere view? Hoe ziet je header file eruit?
|
#5
|
|||
|
|||
Ik krijg de tekst door, want die wordt wel weergeven in de NSLog. Het probleem is dat de Label gewoon niet update, als ik hem aanroep vanuit viewDidLoad dan wel, maar gewoon niet vanuit mijn method, okal zou ik elke keer als er een rij geselecteerd worden de label veranderen naar tabTitle.text = @"HALLO";
dan doet hij dat nog steeds niet.. |
#6
|
||||
|
||||
En wat als je viewController.tabTitle.text doet? (wel even viewController declareren)
Edit: zit nu achter mn Mac en niet iPhone: Wellicht delegate gebruiken. Laatst gewijzigd door Geno; 21-04-11 om 20:13. |
#7
|
|||
|
|||
Welke delegate gebruiken? ik begrijp het niet helemaal.
|
#8
|
||||
|
||||
De juiste manier om data door te geven met een UIModalViewController is via een delegate. Je moet bij de modal view aangeven dat het zich houdt aan de delegate protocol. De delegate van je modal view wijs je toe aan de SecondViewController (dat is neem ik aan de view achter je form sheet).
Dit is een stukje uit de documentatie van Apple: In iOS, there are a number of standard system view controllers that are designed to be presented modally by your application. The basic rules for presenting these view controllers are the same as for your custom view controllers. However, because your application does not have access to the view hierarchy managed by the system view controllers, you cannot simply implement actions for the controls in the views. Interactions with the system view controllers typically take place through a delegate object. Each system view controller defines a corresponding protocol, whose methods you implement in your delegate object. Each delegate usually implements a method to accept whatever item was selected or cancel the operation. Your delegate object should always be ready to handle both cases. One of the most important things the delegate must do is dismiss the presented view controller by calling the dismissModalViewControllerAnimated: method of the view controller that did the presenting—in other words, the parent of the modal view controller. Dit is bv de delegate method die je kan toepassen: Code:
- (void)popOverView: (PopOverView *)popOverView doTab: (NSIndexPath *)index; Laatst gewijzigd door Geno; 22-04-11 om 00:36. |
#9
|
|||
|
|||
Deze delegate zet ik dan in secondviewcontroller.h en roep ik aan in PopOverView.m in de didselectrowatindex?
|
#10
|
||||
|
||||
Nee in de PopOverView.h. Je declareert de delegate protocol in de header file van je modal view, inclusief delegate object:
Code:
id <PopOverViewDelegate> delegate; Code:
popOverView.delegate = self; Code:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self.delegate popOverView:self doTab:[indexPath row]; } Code:
- (void)popOverView: (PopOverView *)popOverView doTab: (NSIndexPath *)index; Code:
@protocol PopOverViewDelegate; @interface PopOverView : UIViewController { id <PopOverViewDelegate> delegate; } @property (assign) id <PopOverViewDelegate> delegate; @protocol PopOverView <NSObject> - (void)popOverView: (PopOverView *)popOverView doTab: (NSIndexPath *)index; @end Laatst gewijzigd door Geno; 22-04-11 om 00:41. |
#11
|
|||
|
|||
YES! Top het werkt! ik zat idd fout met de delegates, ik ben nog een beginner, maar dat is wel even wennen!
|
#12
|
||||
|
||||
Ah top!
Ja die delegates kunnen wat lastig zijn. Je moet het zien als een soort notificatie systeem. In principe is dit niet altijd nodig bij een modalview, maar dus wel als je data doorgeeft naar een andere view. |
Labels |
ipad, modalviewcontroller, view |
Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten) |
|
Soortgelijke discussies |
||||
Discussie | Auteur | Forum | Reacties | Laatste bericht |
ipad doorgeven met zelfde account | peterpijpelink | iPad algemeen | 3 | 28-03-11 15:48 |
App, Ontvangst T-mobile klachten doorgeven | RSH | Odido (T-Mobile) | 0 | 16-06-10 15:46 |
modalViewController voor twee seconden weergeven | libia | Ontwikkelen voor iOS | 4 | 10-06-09 00:47 |
|
|