2012-10-22 1 views
11

Je suis un développeur Android travaillant sur une version iOS de notre application. J'ai besoin de savoir comment obtenir un comportement similaire à startActivityForResult sur Android. J'ai besoin d'afficher un nouveau contrôleur de vue, puis de retourner le contrôle au contrôleur de vue précédent lorsque le nouveau contrôleur de vue est fermé. J'ai également besoin d'une méthode de rappel à déclencher à ce moment-là.iOS: Comment atteindre un comportement tel que startActivityForResult d'Android

Comment puis-je y parvenir dans iOS?

Répondre

11

Il y a plusieurs façons, donc la plupart du temps vous le faites vous-même avec différents modèles. Vous pouvez configurer un contrôleur de navigation dans le délégué de l'application comme suit:

self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
self.navigationController = [[ UINavigationController alloc ] initWithRootViewController:self.viewController ]; 
self.window.rootViewController = self.navigationController; 
[self.window makeKeyAndVisible]; 

Puis, quand vous voulez présenter une nouvelle vc vous pouvez le faire:

OtherViewController *ovc = [[ OtherViewController alloc ] initWithNibName:@"OtherViewController" bundle:nil ]; 
[ self.navigationController pushViewController:ovc animated:YES ]; 

Pour revenir faire ceci:

[ self.navigationController popViewControllerAnimated:YES ]; 

en ce qui concerne un rappel va d'une façon de le faire est de faire un protocole comme celui-ci quelque part dans votre projet:

@protocol AbstractViewControllerDelegate <NSObject> 

@required 
- (void)abstractViewControllerDone; 

@end 

Effectuez ensuite chaque contrôleur de vue que vous souhaitez un rappel à déclencher un délégué aka:

@interface OtherViewController : UIViewController <AbstractViewControllerDelegate> 

@property (nonatomic, assign) id<AbstractViewControllerDelegate> delegate; 

@end 

Enfin lorsque vous présentez une nouvelle vc assigner en tant que délégué:

OtherViewController *ovc = [[ OtherViewController alloc ] initWithNibName:@"OtherViewController" bundle:nil ]; 
    ovc.delegate = self; 
    [ self.navigationController pushViewController:ovc animated:YES ]; 

puis quand vous rejetez l'ovc, faites cet appel

[self.delegate abstractViewControllerDone]; 
[ self.navigationController popViewControllerAnimated:YES ]; 

Et dans le rootVC, qui est conforme au protocole vous m ade, il vous suffit de remplir cette méthode:

-(void) abstractViewControllerDone { 

} 

Vous venez de passer un appel. Cela nécessite beaucoup d'installation, mais d'autres options comprennent l'examen de NSNotifications et des blocs qui peuvent être plus simples en fonction de ce que vous faites.

+1

Android Rocks, iOS Suce! (J'espère que mon patron ne voit pas ce commentaire XD) Enfin, je vois quelque chose qui est beaucoup plus facile à mettre en œuvre dans Android que iOS: D –

+0

Oui, mais maintenant vous pouvez utiliser des blocs qui le font bien mieux –

0

Généralement, vous pouvez utiliser UINavigationController pour joindre votre chaîne de viewControllers. Vous pouvez ensuite naviguer entre viewControllers. Pour le rappel, vous pouvez utiliser la méthode déléguée viewWillDissapear: sur votre deuxième contrôleur de vue et effectuer une action à partir de là.

1

Si nous supposons que vous voulez ouvrir une activité à partir de votre propre application, alors c'est facile. Une activité androïde peut être représentée par un contrôleur de vue (UIViewController).

Les architectures iOS et Android sont très différentes. Les activités sur Android sont indépendantes, les contrôleurs sur iOS sont étroitement connectés dans une application. Vous devez décider comment afficher le contrôleur sur l'écran (en utilisant habituellement un UINavigationController, ou le présenter de manière modale en utilisant presentViewController:animated:) et le connecter au contrôleur parent en quelque sorte pour recevoir le résultat. Un modèle de délégué est le plus approprié pour cela.

Si vous souhaitez démarrer une activité définie dans une autre application ou démarrer une activité système (par exemple pour prendre une photo), vous devez utiliser l'un des contrôleurs prédéfinis (par exemple UIImagePickerController).Sur iOS, vous ne pouvez pas simplement utiliser les contrôleurs d'autres applications de la même manière qu'Android.

Et je peux vous recommander une autre chose - ne pas écrire une application iOS avec des modèles de conception Android. Pensez à ce qui est commun sur iOS et implémentez l'interface utilisateur de cette façon. Ne copiez pas simplement le code Android.

Questions connexes