Dans le chapitre précédent, nous avons appris à travailler avec des contrôles liés à du texte et des images. Mais peut-être aimeriez-vous travailler sur d'autres contrôles. C'est justement ce que je vais vous montrer dans ce chapitre.
Nous allons voir comment afficher un contenu Web, une carte, ou encore demander son avis à l'utilisateur. Et, tout comme pour le chapitre précédent, n'hésitez pas à vous reporter à celui-ci lors de vos futurs développements d'applications afin d'avoir un cas concret sous les yeux.
Afficher du contenu Web
Le contrôle Web View
(figure suivante) est utilisé pour intégrer du contenu Web dans une application.

Pour afficher une page Web, vous appliquerez la méthode loadRequest
à ce contrôle. Par exemple, pour afficher le moteur de recherche Google dans un contrôle Web View
nommé wv
, vous utiliserez l'instruction suivante :
[wv loadRequest:[NSURLRequest requestWithURL: [NSURL URLWithString:@"http://www.google.fr"]]];
La syntaxe est un peu surprenante, je vous l'accorde, mais il « suffit » de dire que :
la méthode
loadRequest
s'applique sur un objet de typeNSURLRequest
;un objet
NSURLRequest
est obtenu en appliquant la méthoderequestWithURL
sur un objet de typeNSURL
;un objet
NSURL
est obtenu en appliquant la méthodeURLWithString
sur une chaîne de caractères contenant l'adresse URL désirée.
Ainsi, le message le plus interne ([NSURL URLWithString:@"http://www.google.fr"]
) définit un objet de type NSURL
et l'initialise avec l'URL de Google :
[NSURL URLWithString:@"http://www.google.fr"]
Cet objet est passé à la méthode requestWithURL
qui est appliquée sur un objet NSURLRequest
:
[NSURLRequest requestWithURL: objet NSURL];
Enfin, l'objet retourné est passé à la méthode loadRequest
qui est appliquée à l'objet Web View wv
:
[wv loadRequest: objet NSURLRequest];
Cette instruction se place dans le fichier d'en-têtes de votre application, comme ceci :
(void)viewDidLoad
{
[super viewDidLoad];
[wv loadRequest:[NSURLRequest requestWithURL: [NSURL URLWithString:@"http://www.google.fr"]]];
}
Il ne vous reste alors plus qu'à lancer l'application : vous venez de créer un navigateur Web qui démarre automatiquement sur le moteur de recherche Google !
Afficher une carte
Le contrôle Map View
(figure suivante) permet d'afficher une carte, comme dans l'application Maps.

En utilisant les méthodes de la classe MKMapView
, vous pouvez, entre autres, centrer la carte sur une coordonnée spécifique, choisir la taille de la zone à afficher ou encore ajouter des informations personnalisées sur la carte.
Dans cette section, je vais vous montrer comment afficher la carte centrée sur Paris. Le but du jeu est d'afficher quelque chose ressemblant à la figure suivante sur votre device.

Définissez un nouveau projet de type Single View Application
et donnez-lui le nom « map ». Une fois n'est pas coutume, nous n'allons pas utiliser Interface Builder dans ce projet !
Ajout du framework MapKit
à l'application
Pour pouvoir afficher une carte dans la fenêtre de votre application, vous devez ajouter le framework MapKit
à l'application. Pour ce faire, rien de plus simple : lisez les instructions suivantes en vous aidant de la figure suivante.
Sélectionnez la première entrée dans le volet de navigation. Ici, l'entrée
map
(1).Sélectionnez l'onglet
Build Phases
dans le volet droit (2).Développez le dossier
Link Binary with Libraries
(3).Cliquez sur
+
(4).Ajoutez le framework désiré (5).
Validez en cliquant sur
Add
(6).

Modification du fichier .h
Cliquez sur ViewController.h
dans le volet de navigation et ajoutez une instruction #import
pour accéder au framework MapKit
:
#import <MapKit/MapKit.h>
Déclarez ensuite un objet de type MKMapView
:
MKMapView *mapView;
Si vous avez suivi mes indications, le fichier mapViewController.h
devrait maintenant avoir l'allure suivante :
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface ViewController : UIViewController
{
MKMapView *mapView;
}
@end
Modification du fichier .m
Cliquez sur ViewController.m
dans le volet de navigation. Vous allez maintenant initialiser, personnaliser et afficher l'objet mapView
. Ce traitement se fera dans la méthode viewDidLoad
. Complétez cette méthode comme ceci :
(void)viewDidLoad
{
[super viewDidLoad];
// Instancier la carte
mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
// Définir le zoom
MKCoordinateSpan span;
span.latitudeDelta=0.5;
span.longitudeDelta=0.5;
// Définir les coordonnées de Paris
CLLocationCoordinate2D parisCoordinates;
parisCoordinates.latitude=48.858391;
parisCoordinates.longitude=2.35279;
MKCoordinateRegion parisRegion;
parisRegion.span=span;
parisRegion.center=parisCoordinates;
// Centrer la carte sur Paris
[mapView setRegion:parisRegion animated:TRUE];
// Ajouter la carte à la vue
[self.view insertSubview:mapView atIndex:0];
}
Cela fait beaucoup d'instructions n'est-ce pas ?
Examinons-les calmement et vous verrez qu'il n'y a rien d'insurmontable…
L'instruction de la ligne 6 réserve l'espace nécessaire en mémoire pour loger l'objet MKMapView mapView
. Il n'y a rien de sorcier là-dedans : c'est juste la syntaxe (un peu lourde je vous l'accorde !) à utiliser :
mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
Le premier message réserve la mémoire pour un objet MKMapView
([MKMapView alloc]
). Le deuxième message utilise la méthode initWithFrame
pour définir les dimensions du rectangle dans lequel sera affichée la vue. Ici, self.view.bounds
signifie la taille de la vue courante.
Le bloc d'instructions suivant définit la structure span
de type MKCoordinateSpan
:
MKCoordinateSpan span;
Par son intermédiaire, on définit le nombre de degrés en latitude (c'est-à-dire du nord au sud) et en longitude (c'est-à-dire de l'ouest à l'est) de la zone d'affichage :
span.latitudeDelta=0.5;
span.longitudeDelta=0.5;
À titre d'information :
1 degré de latitude correspond environ à 111 kilomètres.
1 degré de longitude correspond environ à 111 kilomètres à l'équateur et à 0 kilomètre aux pôles.
Le bloc d'instructions suivant définit les coordonnées de la ville de Paris. Pour cela, la structure parisCoordinates
, de type CLLocationCoordinate2D
est instanciée :
CLLocationCoordinate2D parisCoordinates;
Puis les coordonnées de la ville de Paris y sont stockées :
parisCoordinates.latitude=48.833;
parisCoordinates.longitude=2.333;
Le bloc d'instructions suivant définit le centre de l'affichage et le niveau de détail. Pour cela, la structure parisRegion
de type MKCoordinateRegion
est instanciée :
MKCoordinateRegion parisRegion;
Puis le niveau de détail est précisé en faisant référence à la structure map
définie précédemment :
parisRegion.span=span;
Le centre de l'affichage est défini en faisant référence à la structure parisCoordinates
définie précédemment :
parisRegion.center=parisCoordinates;
Il ne reste plus qu'à envoyer un message à l'objet mapView
pour lui demander d'afficher la région définie dans la structure parisRegion
définie précédemment. Ici, le paramètre animated
étant initialisé à TRUE
, l'affichage se fera avec une animation :
[mapView setRegion:parisRegion animated:TRUE];
Pour terminer, la vue mapView
est ajoutée à l'application, ce qui provoque son affichage :
[self.view insertSubview:mapView atIndex:0];
Et comme vous avez été sages, je vous donne les codes de l'application. :-)
ViewController.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface ViewController : UIViewController
{
MKMapView *mapView;
}
@end
ViewController.m
#import "ViewController.h"
@implementation ViewController
(void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
(void)viewDidLoad
{
[super viewDidLoad];
// instancier la carte
mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
//définir le zoom
MKCoordinateSpan span;
span.latitudeDelta=0.5;
span.longitudeDelta=0.5;
//définir les coordonnées de Paris
CLLocationCoordinate2D parisCoordinates;
parisCoordinates.latitude=48.858391;
parisCoordinates.longitude=2.35279;
MKCoordinateRegion parisRegion;
parisRegion.span=span;
parisRegion.center=parisCoordinates;
// centrer la carte sur Paris
[mapView setRegion:parisRegion animated:TRUE];
// ajouter la carte à la vue
[self.view insertSubview:mapView atIndex:0];
}
(void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
(void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end
Quand le contenu dépasse la taille du contrôle, de la vue ou de la fenêtre
Vous utiliserez un contrôle Scroll View
(figure suivante) pour afficher un contenu qui est plus grand que la fenêtre de l'application. Les utilisateurs pourront alors faire glisser la fenêtre de visualisation sur le contenu, mais aussi zoomer vers l'avant et vers l'arrière en pinçant/étirant l'écran avec deux doigts.

Pour illustrer le fonctionnement de ce contrôle, nous allons y insérer un contrôle Image View
de taille supérieure à celle du Scroll View
. L'utilisateur pourra alors se déplacer dans l'image en utilisant des gestuelles de glisser.
Définissez un projet de type Single View Application
et donnez-lui le nom « usv ».
Dans le volet de navigation, cliquez sur MainStoryboard.storyboard
, puis ajoutez un contrôle Scroll View
au canevas de l'application.
Cliquez sur l'icône Show the Assistant editor
dans la barre d'outils de Xcode, contrôle-glissez-déposez le contrôle Scroll View
du canevas sur le fichier d'en-têtes, juste au-dessus de l'instruction @end
et définissez l'outlet scrollView
.
Le fichier d'en-têtes doit maintenant avoir l'allure suivante :
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@end
Comme à la figure suivante, vous allez maintenant superposer une image au contrôle Scroll View
:
déposez un contrôle
Image View
sur le contrôleScroll View
(1) ;choisissez une image de grande taille et insérez-la dans les ressources de l'application (2) ;
affectez-la au contrôle
Image View
en agissant sur sa propriétéImage
(3) ;visualisez la partie supérieure gauche de l'image en choisissant
Top Left
dans la liste déroulanteMode
(4).

Sélectionnez le fichier ViewController.m
dans le volet de navigation et complétez la méthode viewDidLoad
comme suit :
(void)viewDidLoad
{
[super viewDidLoad];
[scrollView setScrollEnabled:YES];
[scrollView setContentSize:CGSizeMake(819,1024)];
}
Le premier message destiné à l'objet scrollView
autorise les scrollings :
[scrollView setScrollEnabled:YES];
Le deuxième définit la taille du scrolling. Ici, elle a été arbitrairement fixée à 819x1024 pixels :
[scrollView setContentSize:CGSizeMake(819,1024)];
Pour que la zone d'affichage du contrôle Scroll View
s'adapte exactement à celle de l'image, vous pouvez utiliser l'instruction suivante :
[scrollView setContentSize:CGSizeMake(imageView.image.size.width, imageView.image.size.height)];
Voici le code complet, que vous pouvez télécharger grâce à un code web.
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
ViewController.m
#import "ViewController.h"
@implementation ViewController
@synthesize scrollView;
@synthesize imageView;
(void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
(void)viewDidLoad
{
[super viewDidLoad];
[scrollView setScrollEnabled:YES];
//[scrollView setContentSize:CGSizeMake(819,1024)];
[scrollView setContentSize:CGSizeMake(imageView.image.size.width, imageView.image.size.height)];
}
(void)viewDidUnload
{
[self setScrollView:nil];
[self setImageView:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
(void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end
Demander son avis à l'utilisateur
Il est parfois utile d'afficher une boîte de dialogue modale (c'est-à-dire qui se superpose à la fenêtre de l'application et qui y interdit toute action) pour demander à l'utilisateur de prendre une décision. Par exemple, pour confirmer l'arrêt de l'application ou l'écrasement d'un fichier. Deux classes peuvent être utilisées à cet effet : UIAlertView
et UIActionSheet
.
Une boîte de dialogue modale avec un contrôle UIAlertView
Définissez un projet basé sur le modèle Single View Application
et donnez-lui le nom « alerte ».
Dans le volet de navigation, cliquez sur MainStoryboard.storyboard
et ajoutez un contrôle Label
à la vue. Double-cliquez dans le Label
et tapez « Cliquez sur un bouton ».
Définissez un outlet
pour le Label
et donnez-lui le nom status
.
Vous allez maintenant ajouter quelques lignes de code dans la méthode viewDidLoad
pour provoquer l'affichage de la boîte de dialogue modale.
Cliquez sur ViewController.m
dans le volet de navigation et complétez la méthode viewDidLoad
comme suit :
(void)viewDidLoad
{
[super viewDidLoad];
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Voulez-vous arrêter ?"
message:@"Confirmez que vous voulez quitter l'application" delegate:self
cancelButtonTitle:@"Annuler" otherButtonTitles:nil];
[alert addButtonWithTitle:@"Confirmer"];
[alert show];
}
Les lignes 4 à 7 définissent l'objet alert
de type UIAlertView
.
Cet objet est initialisé avec :
un titre :
initWithTitle:@"Voulez-vous arrêter ?"
;un message :
message:@"Confirmez que vous voulez quitter l'application"
;un bouton
Annuler
:cancelButtonTitle:@"Annuler"
.
Les événements qui lui sont liés sont traités dans la classe alertViewController
elle-même (delegate:self
).
L'instruction suivante ajoute le bouton Confirmer
à la boîte de dialogue :
[alert addButtonWithTitle:@"Confirmer"];
Enfin, la dernière instruction affiche la boîte de dialogue :
[alert show];
Vous pouvez lancer l'application et voir qu'elle fonctionne à la perfection (figure suivante), si ce n'est que les boutons ne produisent aucun effet.

Nous allons régler ce problème en définissant une méthode action. Ajoutez le code suivant au fichier alertViewController.m
:
(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0)
status.text = @"Vous avez cliqué sur Annuler";
else
status.text = @"Vous avez cliqué sur Confirmer";
}
La méthode alertView:didDismissWithButtonIndex
est exécutée lorsque l'utilisateur clique sur un des boutons de la boîte de dialogue modale. L'entier buttonIndex
représente l'index du bouton cliqué. Il vaut :
0
si le boutonAnnuler
a été cliqué ;1
si le boutonConfirmer
a été cliqué.
En fonction du bouton cliqué, un message ou un autre est affiché dans le contrôle Label
.
Voici le code de l'application.
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *status;
@end
ViewController.m
#import "ViewController.h"
@implementation ViewController
@synthesize status;
(void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
(void)viewDidLoad
{
[super viewDidLoad];
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Voulez-vous arrêter ?"
message:@"Confirmez que vous voulez quitter l'application" delegate:self
cancelButtonTitle:@"Annuler" otherButtonTitles:nil];
[alert addButtonWithTitle:@"Confirmer"];
[alert show];
}
(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0)
status.text = @"Vous avez cliqué sur Annuler";
else
status.text = @"Vous avez cliqué sur Confirmer";
}
(void)viewDidUnload
{
[self setStatus:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
(void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end
Une boîte de dialogue modale avec un contrôle UIActionSheet
Une variante du contrôle UIAlertView
consiste à utiliser le contrôle UIActionSheet
. Ce dernier affiche une vue modale qui se superpose à la vue actuelle dans la partie inférieure de la fenêtre.
Définissez un projet basé sur le modèle Single View Application
et donnez-lui le nom « actionSheet ».
Dans le volet de navigation, cliquez sur MainStoryboard.storyboard
et ajoutez un contrôle Label
à la vue. Double-cliquez sur le Label
et tapez « Appuyez sur un bouton ».
Enfin, définissez un outlet pour ce Label
et donnez-lui le nom status
.
Vous allez maintenant ajouter quelques lignes de code dans la méthode viewDidLoad
pour provoquer l'affichage de la vue modale.
Cliquez sur ViewController.m
dans le volet de navigation, et complétez la méthode viewDidLoad
comme suit :
(void)viewDidLoad
{
[super viewDidLoad];
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Voulez-vous arrêter l'application ?"
delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil
otherButtonTitles:@"Oui", @"Non",@"Je ne sais pas", nil];
actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
actionSheet.destructiveButtonIndex = 1;
[actionSheet showInView:self.view];
}
La première instruction définit l'objet actionSheet
de type UIActionSheet
.
Cet objet est initialisé avec :
un titre :
initWithTitle:@"Voulez-vous arrêter l'application ?"
;trois boutons :
otherButtonTitles:@"Oui", @"Non",@"Je ne sais pas", nil
).
Le traitement du contrôle se fait dans la classe actionSheetViewController
elle-même : delegate:self
.
L'instruction suivante définit le style du contrôle :
actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
Les valeurs possibles pour la propriété actionSheetStyle
sont les suivantes (N'hésitez pas à les tester !) :
UIActionSheetStyleAutomatic
;UIActionSheetStyleDefault
;UIActionSheetStyleBlackTranslucent
;UIActionSheetStyleBlackOpaque
.
L'instruction suivante indique que le bouton d'index 1 (le deuxième en d'autres termes) doit être différencié des autres, car il présente un caractère particulier. Ce bouton apparaît en rouge.
actionSheet.destructiveButtonIndex = 1;
L'instruction suivante ajoute la vue modale dans la vue courante :
[actionSheet showInView:self.view];
Lancez l'application dans le simulateur. Vous devriez obtenir quelque chose ressemblant à la figure suivante.

L'application fonctionne, mais un triangle de couleur jaune apparaît dans le code, comme à la figure suivante

Observez d'un peu plus près le message d'erreur. Xcode nous indique que la classe ViewController
n'implémente pas le protocole UIActionSheetDelegate
et ne peut donc pas répondre aux événements générés par l'objet actionSheet
. Qu'à cela ne tienne : cliquez sur ViewController.h
dans le volet de navigation et ajoutez le protocole demandé dans la déclaration de l'interface :
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UIActionSheetDelegate>
@property (weak, nonatomic) IBOutlet UILabel *status;
@end
Le problème a disparu, comme par magie.
Maintenant, il ne reste plus qu'à définir le code qui réagit aux clics sur les boutons de la boîte de dialogue modale. Cliquez sur ViewController.m
dans le volet de navigation et ajoutez la méthode actionSheet:clickedButtonAtIndex
dans le code :
(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
status.text = @"Vous avez cliqué sur Oui";
if (buttonIndex == 1)
status.text = @"Vous avez cliqué sur Non";
if (buttonIndex == 2)
status.text = @"Vous avez cliqué sur Je ne sais pas";
}
Cette méthode est appelée lorsqu'un bouton de la boîte de dialogue modale est pressé. Le NSInteger buttonIndex
représente l'index du bouton pressé par l'utilisateur (0
si le premier bouton est pressé, 1
si le deuxième bouton est pressé, etc.).
La méthode clickedButtonAtIndex
se contente d'afficher un texte en rapport avec le bouton cliqué dans le contrôle Label
.
Vous trouverez à la suite le code de l'application.
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UIActionSheetDelegate>
@property (weak, nonatomic) IBOutlet UILabel *status;
@end
ViewController.m
#import "ViewController.h"
@implementation ViewController
@synthesize status;
(void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
(void)viewDidLoad
{
[super viewDidLoad];
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"Voulez-vous arrêter l'application ?"
delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil
otherButtonTitles:@"Oui", @"Non",@"Je ne sais pas", nil];
actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
actionSheet.destructiveButtonIndex = 1;
[actionSheet showInView:self.view];
}
(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
status.text = @"Vous avez cliqué sur Oui";
if (buttonIndex == 1)
status.text = @"Vous avez cliqué sur Non";
if (buttonIndex == 2)
status.text = @"Vous avez cliqué sur Je ne sais pas";
}
(void)viewDidUnload
{
[self setStatus:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
(void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end
En résumé
Le contrôle
Map View
permet d'afficher une carte, comme dans l'application Maps d'Apple. En utilisant les méthodes de la classeMKMapView
, vous pouvez, entre autres, centrer la carte sur une coordonnée spécifique, choisir la taille de la zone à afficher ou encore ajouter des informations personnalisées sur la carte.Vous utiliserez un contrôle
Scroll View
pour afficher un contenu qui est plus grand que la fenêtre de l'application. Les utilisateurs pourront alors faire glisser la fenêtre de visualisation sur le contenu, mais aussi zoomer vers l'avant et vers l'arrière en pinçant/étirant l'écran avec deux doigts.Il est parfois utile d'afficher une boîte de dialogue modale (c'est-à-dire qui se superpose à la fenêtre de l'application et qui y interdit toute action) pour demander à l'utilisateur de prendre une décision. Par exemple, pour confirmer l'arrêt de l'application ou l'écrasement d'un fichier. Deux classes peuvent être utilisées à cet effet :
UIAlertView
etUIActionSheet
.