Archive

Articles taggués ‘iphone’

Problème de compilation avec UITableViewCell

06/07/2009

Le sdk 3 et 2 ne sont plus compatibles

Pour palier au problème il suffit de faire ceci :

#if __IPHONE_3_0
	cell.imageView.image = icon;
#else
	cell.image = icon;
#endif

iPhone , ,

Développer une application iPhone #3/3

27/01/2009

On reprend où l’on s’est arrêté dans l’exercice 2.

Le but de cet exercice est de rendre le programme un peu plus dynamique en ajoutant un objet UIPickerView à la vue CurrencyChoiceView qui permettra de choisir les devises à convertir et de notifier ConvViewController de ce changement.

 

1. Création de la classe Currency

Créons une classe Currency qui contiendra les informations d’une monnaie: son nom et taux de change comparé aux autres devises. C’est cet objet que nous afficherons dans le UIPickerView de la classe CurrencyChoiceViewController

// Currency.h

// Classe permettant de gérer les devises à convertir

@interface Currency : NSObject  {
	NSString * name;
	float livresValue;
	float eurosValue;
	float dollarsValue;
}

- (id)initWithName:(NSString *)namex andLivresValue:(float)livresValuex
	                             andEurosValue:(float)eurosValuex
			             andDollarsValue:(float)dollarsValuex;
- (NSString*)getName;
- (float)getChangeValue:(Currency *) otherCurrency ;
@end

 

// Currency.m

#import "Currency.h"

@implementation Currency
	// methode d'initialisation appellée après la methode Alloc
	- (id)initWithName:(NSString *)namex andLivresValue:(float)livresValuex
			andEurosValue:(float)eurosValuex
			andDollarsValue:(float)dollarsValuex {
		name = namex;
		livresValue = livresValuex;
		eurosValue = eurosValuex;
		dollarsValue = dollarsValuex;
		return self;
	}

	- (NSString*)getName {
		return name;
	}

	// permet de comparer le taux de change entre la devise de l'instance et celle passée 
	// en parametre
	- (float)getChangeValue:(Currency *) otherCurrency  {
		if ([[otherCurrency getName] isEqualToString:@"Livres"]) return livresValue;
		if ([[otherCurrency getName] isEqualToString:@"Euros"]) return eurosValue;
		if ([[otherCurrency getName] isEqualToString:@"Dollars"]) return dollarsValue;
		return 0;
	}

@end

 

2. Modification de CurrencyChoiceViewController

On revient sur cet objet qui implémentera deux nouvelles classes.

La première UIPickerViewDataSource permettra d’ajouter les éléments d’une source de données (ici un NSArray de Currency) à l’objet UIPickerView.

La seconde UIPickerViewDelegate permettra à l’objet UIPickerView contenu dans CurrencyChoiceViewController de lui déléguer la gestion des événements qui lui sont liés.

Le UIPickerView que nous allons ajouter contiendra 2 listes. La première permettra de sélectionner la devise à convertir, la seconde la monnaie de référence.

// CurrencyChoiceViewController.h

#import <UIKit/UIKit.h>
#import "Currency.h"

@interface CurrencyChoiceViewController : UIViewController<UIPickerViewDataSource,
                                              UIPickerViewDelegate> {
	// une liste déroulante qui nous permettra de choisir les devises de conversion
	IBOutlet UIPickerView * pickerView;	

	// le tableau qui contiendra les objets devises
	NSArray * currencyItems;
}

// méthode d'initialisation de la classe
- (id)init;

@end

 

//CurrencyChoiceViewController.m

#import "CurrencyChoiceViewController.h"

@implementation CurrencyChoiceViewController

- (id)init {
	// Construction de la source de donnée
	Currency * euros = [[Currency alloc] initWithName:@"Euros" 
                  andLivresValue:0.942676548 andEurosValue:1 andDollarsValue:1.2975];
	Currency * livres = [[Currency alloc] initWithName:@"Livres" 
                  andLivresValue:1 andEurosValue:1.06080925 andDollarsValue:1.3764];
	Currency * dollars = [[Currency alloc] initWithName:@"Dollars"
                  andLivresValue:0.726532985 andEurosValue:0.77071290 andDollarsValue:1];
	currencyItems = [[NSArray alloc] initWithObjects:euros, livres, dollars, nil];
	[euros release];
	[livres release];
	[dollars release];	

	return [super initWithNibName:@"CurrencyChoiceView" bundle:nil];
}

// Appellée par l'application lorsque la vue a été chargée
- (void)viewDidLoad  {
	// La methode NSLog pemet d'afficher du contenu dans la console de Xcode
	// pour l'afficher cliquez sur Run > Console
	NSLog(@"CurrencyChoiceViewController.viewDidLoad");

	// par defaut on souhaite convertir des euros
	// en livres sterlling
	// on selectionne les items correspondants dans le picker
	[pickerView selectRow:0 inComponent:0 animated:NO];
	[pickerView selectRow:1 inComponent:1 animated:NO];

	// on appelle manuellement didSelectRow pour notifier de la selection des devises
	[self pickerView:pickerView didSelectRow:0 inComponent:0];
	[self pickerView:pickerView didSelectRow:1 inComponent:1];
}

// permet d'organiser son code source pour naviguer plus facilement avec dans Xcode
#pragma mark ---- UIPickerViewDataSource delegate methods ----

// ici on indique qu'on souhaite afficher 2 listes de devises
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
	return 2;
}

// Le nombre d'elements à afficher sera egal au nombre d'elements contenu dans 
// le NSArray de devises
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
	return currencyItems.count;
}

#pragma mark ---- UIPickerViewDelegate delegate methods ----

// Retourne le nom de la devise contenu dans la ligne row passée en parametre et contenu
// dans le composant X
- (NSString *)pickerView:(UIPickerView *)pickerView 
         titleForRow:(NSInteger)row forComponent:(NSInteger)component {
	return [[currencyItems objectAtIndex:row] getName];
}
// methode appellée lorsqu'une ligne a été selectionnée par l'utisateur
// une fois la ligne selectionnée nous notifierons le contrôlleur ConvViewController
// que ses données doivent etre mis à jour
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(
NSInteger)component {
	Currency * currency = [currencyItems objectAtIndex:row];

	// Pour notifier un autre composant il faut que celui ci se soit déclaré auprès 
	// du notificationCenter. Nous verrons un peu plus loin, que ConvViewController a 
	// declaré 2 observers set_ConvCurrency et set_ValueCurrency qui permettront 
        // de mettre à jour les devises utilisées 
	if (component == 1) {
		[[NSNotificationCenter defaultCenter]
                    postNotificationName:@"set_ConvCurrency" object:currency];
	} else {
		[[NSNotificationCenter defaultCenter]
                    postNotificationName:@"set_ValueCurrency" object:currency];
	}
}

- (void)dealloc {
	[currencyItems release];
	[pickerView release];
    [super dealloc];
}

@end

 

3. Modification de CurrencyChoiceView.xib
Editez CurrencyChoiceView.xib, supprimez le label que nous avions ajouté dans l’exercice 2. Déposez un UIPickerView dans la vue et créez les connexions avec le contrôleur :

tutorial_3_1

 

4. Modification de ConvViewController

Nous allons ajouter 2 outlet UILabel pour pouvoir modifier leur valeurs lors du changement de devise. Ainsi que 2 pointers vers les objets Currency sélectionnés dans CurrencyChoiceViewController.

Pour finir, il faudra aussi ajouter les 2 méthodes que nous allons déclarer au centre de notifications.

//ConvViewController.h

#import <UIKit/UIKit.h>
#import "Currency.h"

@interface ConvViewController : UIViewController <UITextFieldDelegate> {
	// 2 pointeurs vers les textField de la vue
	IBOutlet UITextField * valueField;
	IBOutlet UILabel * valueLabel;
	IBOutlet UITextField * convField;
	IBOutlet UILabel * convLabel;
	Currency * convCurrency;
	Currency * valueCurrency;
}

- (id)init;

// une méthode virtuelle à implémenter, c'est elle qui s'occupera de la conversion euros/francs
- (void) convertValue;



// methode à declarer auprès du centre de notification
// la notification contiendra un pointeur vers l'objet devise choisi
// dans la classe ConvViewController
- (void) setValueCurrency:(NSNotification *)aNotification;
- (void) setConvCurrency:(NSNotification *)aNotification;

@end

 

// ConvViewController.m



#import "ConvViewController.h"

@implementation ConvViewController
- (id)init {
	// on declare ajoute 2 observer setValueCurrency et setConvCurrency aupres du centre 
	// de notification pour l'instance courante de ConvViewController
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setValueCurrency:)
					name:@"set_ValueCurrency" object:nil];
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setConvCurrency:)
					name:@"set_ConvCurrency" object:nil];

	return [super initWithNibName:@"ConvView" bundle:nil];
}

- (void)viewDidLoad  {
	NSLog(@"ConvViewController.viewDidLoad");
}

- (void)convertValue {
	if (valueCurrency != nil && convCurrency != nil && [valueField.text length]>0) {
		// on recupere le taux de change entre les 2 devises choisies
		float change =  [valueCurrency getChangeValue:convCurrency];
		double convValue = [valueField.text doubleValue] * change;

		// les NSString s'auto release, pas besoin de le faire manuellement
		NSString * strConvValue = [NSString stringWithFormat:@"%0.2f", convValue];	

		convField.text = strConvValue;
	}
}

// une fois une notification reçue
// on met a jour les UILabel de la vue pour afficher le nouveau nom des devises
// et on met à jour le montant de la conversion

- (void) setValueCurrency:(NSNotification *)aNotification {
	valueCurrency = [aNotification object];
	NSLog(@"ConvViewController.setValueCurrency %@ ", [valueCurrency getName]);
	valueLabel.text = [valueCurrency getName];
	[self convertValue];
}

- (void) setConvCurrency:(NSNotification *)aNotification {
	convCurrency = [aNotification object];
	NSLog(@"ConvViewController.setConvCurrency %@ ", [convCurrency getName]);
	convLabel.text = [convCurrency getName];
	[self convertValue];
}

// appelé lorsque la touche entrée du clavier virtuelle est activée
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
	// valueField abandonne le focus, le clavier virtuel disparaitra
	[valueField resignFirstResponder];		

	// on appelle la methode convertValue, self = this
	[self convertValue];	

	return YES;
}

// appelé lorsque valueField prend le focus
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
	// reinitialise la valeur de convField
	convField.text = @"";

	return YES;
}

// lorsque un évènement touch a été détecté sur la vue ou la fenêtre 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
	// abandonne le focus, le clavier virtuel disparaitra
    [valueField resignFirstResponder];
}

// libération de la mémoire, lors de la destruction de l'objet
- (void)dealloc {
	[valueField release];
	[convField release];
	[valueLabel release];
	[convLabel release];
	[convCurrency release];
	[valueCurrency release];
	[super dealloc];
}

@end

 

5. Modification de ConvView.xib

Il faut créer les connexions entre les 2 outlets UIlabel du contrôleur et ceux de la vue

tutorial_3_2

6. Compiler et tester

Comme d’habitude, en théorie, tout compile! Vous disposez maintenant d’une application qui convertit euros, livres et dollars.
Les sources du projet sont ici : currencyconv03 

Evidemment, on fait plus excitant… mais pour un début, on s’en contentera.

tutorial_3_4

iPhone , , , ,

Développer une application iPhone #2/3

25/01/2009

On reprend où l’on s’est arrêté dans l’exercice 1.

Le but de ce nouvel exercice est de créer une seconde vue et de pouvoir naviguer entre elle et celle que nous avions créée dans l’exercice précédent.

Pour gérer la navigation on utilisera l’objet du SDK PageController. Lorsque l’on cliquera dessus, la vue passera à la suivante ou la précédente avec un effet de transition, les vues glisseront d’un coté ou d’un autre.

Pour y arriver facilement on va ajouter dans la fenêtre principale de l’application un container de type scrollview dans lequel on concatènera ces 2 vues.

On modifiera aussi les propriétés de ce scrollview pour autoriser le passage de l’une à l’autre en cliquant sur l’écran.

1. Créer une nouvelle vue
Cliquez sur File > New File > iPhone OS > User Interfaces > View XIB.

Créez le fichier CurrencyChoiceView.xib dans le répertoire CurrencyConv/Resources.

Editez la vue avec Interface Builder pour simplement lui ajouter un label «2ème vue».

2. Créer un contrôleur
Cliquez sur File > New File > iPhone OS > Cocoa Touch Classes > UIViewController subclass
Créez le fichier CurrencyChoiceViewController.m dans le répertoire CurrencyConv/Classes

//CurrencyChoiceViewController.h

#import <UIKit/UIKit.h>

@interface CurrencyChoiceViewController : UIViewController {
    IBOutlet UILabel *label;
}

// méthode d'initialisation de la classe
// appelé après la construction de l'objet
// nous indiquerons dans cette méthode le fichier .xib associé à ce contrôleur
// nous modifierons aussi ConvViewController.h du précèdent exercice 
- (id)init;

@end

 

//CurrencyChoiceViewController.m

#import "CurrencyChoiceViewController.h"

@implementation CurrencyChoiceViewController

- (id)init {
	return [super initWithNibName:@"CurrencyChoiceView" bundle:nil];
}

- (void)dealloc {
    [super dealloc];
}

@end

Modifiez le fichier ConvViewController.h et .m de l’exercice 1 et ajoutez la méthode init en spécifiant ConvView comme vue.

 

3. Créer les connexions entre la vue et le contrôleur
Editez le file’s Owner, typez le en CurrencyChoiceViewController et créez une connexion entre les outlets label et view avec leurs équivalents dans la vue. Sauvegardez et revenez dans Xcode.

tutorial_2_1

4. Modification de CurrencyConvAppDelegate
Nous allons completement réecrire ces 2 fichiers:

// CurrencyConvAppDelegate.h

#import <UIKit/UIKit.h>

// pour passer d'une vue à l'autre nous utiliserons un scrollview
// ce qui permettra de "glisser" entre les vues
// on ajoute UISCrollViewDelegate pour gérer les évènements liés au scroll
@interface CurrencyConvAppDelegate : NSObject <UIApplicationDelegate, UIScrollViewDelegate> {
	// pointeur vers la fenêtre principale de l'application
	IBOutlet UIWindow * window;

	// le scrollview contiendra nos 2 vues cote à cote
	IBOutlet UIScrollView * scrollView;

	// l'objet pageControl permettra de passer de l'une à l'autre avec 
	// un effet de transition lors du changement
	IBOutlet UIPageControl * pageControl;

	// Indique que le scroll provient du pageController
	BOOL pageControlUsed;
}

// appellé quand on clique sur l'instance de UIPageControl
- (IBAction)changePage:(id)sender;

@end

// déclaration de methodes privées
@interface CurrencyConvAppDelegate (PrivateMethods)
- (void)scrollViewDidScroll:(UIScrollView *)sender;
@end

 
 

// CurrencyConvAppDelegate.m

#import "CurrencyConvAppDelegate.h"
#import "ConvViewController.h"
#import "CurrencyChoiceViewController.h"

@implementation CurrencyConvAppDelegate

	- (void)applicationDidFinishLaunching:(UIApplication *)application {
		// on cache la bar affichée en haut
		[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];

		// on definit quelques propriétés
		pageControl.numberOfPages = 2;
		pageControl.currentPage = 0;

		// pour qu'il y ait un effet de scroll, on doit indiquer la taille qu'aura la vue
		// ici la largeur est egale à la taille d'une vue * le nombre de vues
		scrollView.contentSize = CGSizeMake(scrollView.frame.size.width
                      * pageControl.numberOfPages, scrollView.frame.size.height);
		scrollView.showsHorizontalScrollIndicator = NO;
		scrollView.showsVerticalScrollIndicator = NO;
		scrollView.pagingEnabled = YES;
		scrollView.delegate = self;

		// crée une instance de ConvViewController en appellant la methode alloc 
		// et appelle ensuite la methode init sur cette nouvelle instance
		ConvViewController * c1 = [[ConvViewController alloc] init];
		CGRect frame = scrollView.frame;

		// positionne la frame du premier controlleur à la position 0 0
		frame.origin.x = 0;
		frame.origin.y = 0;
		c1.view.frame = frame;

		CurrencyChoiceViewController * c2 = [[CurrencyChoiceViewController alloc] init];
		frame = scrollView.frame;

		// positionne la frame du second controlleur à coté de la premiere
		// x est egal à la largeur de cette vue
		frame.origin.x = frame.size.width;
		frame.origin.y = 0;
		c2.view.frame = frame;	

		[scrollView addSubview:c1.view];
		[scrollView addSubview:c2.view];
	}

	// methode appellée quand la fin du scroll est detectée
	// on met à jour la page courante
	- (void)scrollViewDidScroll:(UIScrollView *)sender {
		CGFloat pageWidth = scrollView.frame.size.width;
		int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
		pageControl.currentPage = page;
	}

	// appellé quand on clique sur pageControll
	- (IBAction)changePage:(id)sender {
		CGRect frame = scrollView.frame;
		frame.origin.x = frame.size.width * pageControl.currentPage;
		frame.origin.y = 0;	

		// Scrolls a specific area of the content so that it is visible in the recevier.
		[scrollView scrollRectToVisible:frame animated:YES];
	}

	- (void)dealloc {
		[scrollView release];
		[pageControl release];
		[window release];
		[super dealloc];
	}

@end

 

5. Modification de la fenêtre principale de l’application
Editez MainWindow.xib, ajoutez à la fenêtre un DataView de type UIScrollView et un object PageController (classé dans Inputs & value) comme dans la capture suivante:

tutorial_2_2

6. Créer les connexions entre la vue principale et le contrôleur

tutorial_2_3

 

7. Compiler et Tester
En théorie, tout doit compiler… vous n’avez plus qu’a lancer le simulateur et tester le changement de page.

tutorial_2_4

Le code du projet est téléchargeable ici : currencyconv02

Prochaine étape: ajouter dans la nouvelle vue 2 listes déroulantes permettant de choisir les devises du premier écran.

iPhone , , , ,

Développer une application iPhone #1/3

23/01/2009

Je découvre le développement Xcode et objective-C depuis quelques soirées.

Pas trop gourmand pour l’instant, je souhaite créer un convertisseur francs/euros qui permettra de s’initier à Xcode et à Interface Builder.

Dans ce premier exercice, nous créerons le projet CurrencyConv et réaliserons les 2 tâches suivantes :

 - une vue permettant de créer l’interaction avec l’utilisateur. Cette vue consistera à afficher 3 Label et 2 TextField

 - un contrôleur pour convertir la valeur du premier TextField dans le second après que l’utilisateur ait saisi un montant avec le clavier virtuel de l’iPhone.

 

1. Création du Projet

Lancez Xcode qui se trouve dans /Developper/Applications et créez un nouveau projet en cliquant sur File > New Project. 

tutorial_1_1 

Comme choix de template de projet optez  pour iPhoneOS > Application > Window-Based Application

Indiquez ensuite le nom du projet et le répertoire dans lequel vous souhaitez le sauvegarder.

 

2. Présentation de la fenêtre principale de Xcode

tutorial_1_2

Groups & Files

Chaque dossier représente un groupe basé sur le type de fichier qu’il contiendra

Ainsi toutes les classes objective-C que nous créerons seront dans Classes 

Les images et fichier .xib seront dans Resources 

Ces groupes ne représentent pas des répertoires dans le gestionnaire de fichiers, à vous de les créer dans Finder pour éviter que cela ne devienne le bazar.

 

3. Création d’une vue

Cliquez sur le groupe Ressources puis sur File > New File.

Comme choix de template optez  pour iPhoneOS > User Interfaces > View XIB.

A l’écran suivant indiquez comme nom de fichier ConvView.xib et comme chemin CurrencyConv/Resources

Double-cliquez ensuite sur le fichier NIB Files > ConvView.xib de la fenêtre principale Xcode, ceci ouvrira un autre programme, Interface Builder.

tutorial_1_4 

Nous voulons créer une vue avec un fond noir : 

Si vous cliquez sur View la fenêtre Attributes s’activera et vous pourrez changer son background.

Nous souhaitons aussi ajouter 3 UILabel et 2 UITextField dans la vue :

En cliquant sur Inputs & Values de la fenêtre Library, cliquez et glissez à 3 reprises les labels dans la vue et à 2 reprises avec les Text Field.

Sélectionnez le premier input et dans la fenêtre d’attributs, choisissez un Keyboard de type Numbers & Punctuation et Done comme type de Return Key.

Vous pouvez également cliquez sur selected pour qu’il soit automatiquement sélectionné quand la vue apparaîtra dans l’application, aligner le texte à droite et autres détails du genre…

Pour le second input il faudra dé-sélectionner Enabled car il ne servira qu’à afficher les résultats de conversion.

Et voilà, la vue est prête. 

tutorial_1_5 

Il n’y a plus qu’à faire cmd-s et cmd-q pour revenir sur XCode.

 

4. Création du contrôleur de vue 

Cliquez sur le groupe Classes puis sur File > New File.

Comme choix de template optez  pour iPhoneOS > Cocoa Touch Classes > UIViewController subclass.

A l’écran suivant indiquez comme nom de fichier ConvViewController et comme chemin CurrencyConv/Classes.

Un fichier ConvViewController.m et .h ont été ajouté au groupe.

Nous allons les retaper un peu:

//ConvViewController.h

#import <UIKit/UIKit.h>

// Dans le framework cocoa la plupart des objets héritent de NSObjet
// Nous allons hériter directement des objets du SDK, ici de UIViewController
@interface ConvViewController : UIViewController <UITextFieldDelegate> {
	// 2 pointeurs vers les textField de la vue
	IBOutlet UITextField * valueField;
	IBOutlet UITextField * convField;
}

// une classe virtuelle à implémenter, c'est elle qui s'occupera de la conversion euros/francs
- (void)convertValue;

@end

 

// ConvViewController.m

#import "ConvViewController.h"

@implementation ConvViewController

- (void)convertValue {
	double euro = 6.55957;
	double convValue = [valueField.text doubleValue] * euro;

	// les NSString s'auto release, pas besoin de le faire manuellement
	NSString * strConvValue = [NSString stringWithFormat:@"%0.2f", convValue];	

	convField.text = strConvValue;
}

// appelé lorsque la touche entrée du clavier virtuel est activée
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
	// valueField abandonne le focus, le clavier virtuel disparaitra
	[valueField resignFirstResponder];		

	// on appelle la methode convertValue, self = this
	[self convertValue];	

	return YES;
}

// appelé lorsque valueField prend le focus
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
	// reinitialise la valeur de convField
	convField.text = @"";

	return YES;
}

// lorsque un évènement touch a été détecté sur la vue ou la fenêtre 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
	// abandonne le focus, le clavier virtuel disparaîtra
    [valueField resignFirstResponder];
}

// libération de la mémoire, lors de la destruction de l'objet
- (void)dealloc {
	[valueField release];
	[convField release];
	[super dealloc];
}
@end

 

5. Ajouter la vue dans la fenêtre de l’application

// CurrencyConvAppDelegate.h

#import <UIKit/UIKit.h>

@class ConvViewController;

@interface CurrencyConvAppDelegate : NSObject <UIApplicationDelegate> {
    // pointeur vers la fenêtre principale de l'application
    IBOutlet UIWindow * window;

    // pointeur vers notre controller de conversion
    ConvViewController * convViewController;
}

@end

 

// CurrencyConvAppDelegate.m

#import "CurrencyConvAppDelegate.h"
#import "ConvViewController.h"

@implementation CurrencyConvAppDelegate

- (void)applicationDidFinishLaunching:(UIApplication *)application {
	// en initialisant le controller on spécifie la vue qui lui sera associée,
        // ici c'est notre xib, convView
	ConvViewController * aController = [[ConvViewController alloc]
                 initWithNibName:@"ConvView" bundle:[NSBundle mainBundle]];
	self.convViewController = aController;
	[aController release];

	// on cache la barre système affichée en haut
	[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];

	// on ajoute notre vue à la fenêtre principale
	UIView * controllersView = [self.convViewController view];
	[window addSubview:controllersView];

	// Affichage la fenêtre principale de l'application 
    [window makeKeyAndVisible];
}

- (void)dealloc {
    [convViewController release];
    [window release];
    [super dealloc];
}

@end

 

6. Connecter les éléments de la vue au contrôleur 

C’est le moment de tout brancher et de relier les object de la vue ConvView au ConvViewController.

Il faut double cliquer sur NIB Files > ConvView.xib pour lancer Interface Builder

Selectionnez File’s Owner et changez son type dans l’onglet Object Identity de la fenêtre Attributes: Remplacez NSObject par ConvViewController.

Cliquez ensuite sur l’onglet ConvViewController Connection pour relier les outlets du contrôleur aux éléments présents dans la vue.

tutorial_1_6 
Une dernière connexion reste à créer, il faut cliquer sur le TextField Euros puis dans le panneau de Connections il faut relier Outlets > delegate vers le file owner. Ceci servira à déléguer l’exécution de la méthode convertValue au contrôleur.

 

7. Compiler et Tester

Dans Xcode faire cmd-b pour compiler le projet avant de lancer le simulateur iPhone. 

tutorial_1_7 
Télécharger le projet Xcode ici : currencyconv01.zip

Au fils des tutoriaux cette petite application CurrencyConv évoluera et intégrera les principales fonctionnalités du SDK de l’iPhone. 

Parallèlement il y aura d’autres petits exercices pour apprendre à maîtriser ce très curieux langage : l’objective-C.

Prochaines fonctionnalités: Gérer plusieurs vue dans l’application. Ajouter une vue permettant de changer les devises en utilisant les listes du framework.

iPhone , , , ,

Hello, is this thing on ?

21/01/2009

Dans la série ”mais est-ce bien nécessaire ?”, apprenons à coder une application iphone complètement ”démente” !
Mais avant… 

wired_keyboard20070813
Quel bel objet ? N’importe quel zombie, uh, utilisateur enthousiaste de Apple dirait qu’il s’agit là du top, de l’excellence en matière de clavier et de confort d’utilisation ! Nous lui répondrons simplement, soit.

Car tout n’est pas aussi rose pour le programmeur.

Voici quelques raccourcis clavier à connaître par coeur pour ne pas devenir gue-din:

alt + ( = {


alt + ) = }


alt + n = ~


alt + maj + ( = [


alt + maj + ) = ]


alt + maj + / = \
alt + maj + L = |

    (très drôle celui-là)

Armé de ces quelques rudiments, il ne reste plus qu’à télécharger le sdk iphone - utilisable uniquement sur mac (ils sont sympas) - en s’inscrivant ici bas: http://developer.apple.com/iphone/.

Bon et maintenant on programme quoi ?
Hé bien, pourquoi pas un convertisseur de devises ?

Dément, je vous dis.

Blabla , ,