Articles taggés avec 'ViewController'

Xcode4: Code rétrocompatible

Xcode 4 permet de développer des applications pour iPhone ou iPad avec abaissement de la cible iPhone OS 4.3 d'aujourd'hui. Toutefois, le même code que celui fourni avec des modèles «péché» de l'arrogance, en supposant que notre demande sera cibler l'iPhone OS 4 ou supérieur. Dans le délégué de l'application, par exemple, Xcode insère les lignes de code suivantes:

1
2
3
4
5
6
7
BOOL ) application : ( UIApplication * ) application didFinishLaunchingWithOptions : ( NSDictionary * ) launchOptions - (BOOL) application: (UIApplication *) didFinishLaunchingWithOptions application: ( NSDictionary *) launchOptions
{
/ / Remplacer le point pour la personnalisation, après lancement de l'application.
self.window.rootViewController = self.viewController;
; [Self.fenetre makeKeyAndVisible];
; retourner OUI;
}

En savoir plus ...

UIWebView pour intercepter l'ouverture d'un lien

L'objet UIWebView composant est un très utile et polyvalent, idéal pour résoudre de nombreux problèmes. Non seulement est parfait pour afficher une page HTML sur le net, mais vous pouvez l'utiliser à d'autres fins utiles, telles que:

  • Afficher rapidement des documents PDF
  • Voir des vidéos ou des photos
  • Afficher le contenu HTML / CSS local
  • Faux contenu dans la phase de prototype ...

En savoir plus ...

10 conseils utiles et des extraits pour Apple iPhone et Xcode

1. Cordes sur plusieurs lignes

Dans Xcode, vous pouvez "casser" une chaîne sur plusieurs lignes en insérant à la fin avec une barre oblique inverse "\". Cette fonctionnalité peut être utile lorsque, par exemple, nous voulons insérer le texte HTML dans un contrôle UIWebView :

En savoir plus ...

iPhone SecondApp: Devinez le nombre - Partie 2

Comme mentionné iPhone FirstApp: Devinez le nombre - Partie 1 , nous verrons comment faire une demande de l'iPhone d'Apple sans utiliser Interface Builder! En effet, nous allons éliminer les fichiers physiques créés par Interface Builder Xcode assistant. A la fin de ce post, alors, nous avons une demande identique à tous égards, à celles construites dans la première partie, avec la différence que nous allons atteindre tous nos composants visuels, y compris la fenêtre principale, pour le code complet.

La demande déjà faite, si vous voulez juste de télécharger, est disponible sur mon dépôt de Google Code:

Je tiens à souligner d'emblée comme le ZIP de cet exemple pèse moins que la dernière fois! :)

Nous créons le projet

Nous commençons par créer notre projet SecondApp (pour le distinguer de FirstApp), mais cette fois choisissez Fenêtre application basée sur:

newproject

Maintenant, nous allons supprimer tout ce qui touche à Interface Builder. : eliminatelo anche dal file system, quindi selezionate Also Move to Trash . Éliminer le fichier MainWindow.xib , situé dans le dossier Resources , le retirer du système de fichiers aussi, et puis sélectionnez Déplacer vers la Corbeille également. nella casella Main nib file base name : Sélectionnez ensuite le fichier SecondoApp-info.plist et supprimer la référence à la MainWindow fichier nib dans le nom de la boîte principale base:

deleteib

À ce stade, nous n'avons plus aucune fenêtre, au moins par Interface Builder. , e modifichiamo la funzione main() in questo modo: Donc, nous ouvrons le fichier main.m , situé dans Other Sources , et de modifier la fonction main() comme ceci:

1
2
3
4
5
6
7
8
9
10
11
int argc, char * argv [ ] ) { int main (int argc, char * argv []) {

pool = [ [ NSAutoreleasePool alloc ] init ] ; NSAutoreleasePool * pool = [[ NSAutoreleasePool alloc] init];

/ / En supprimant le fichier. XIB, nous avons perdu le suivi
/ / Le délégué app puis la passer à "la main"
UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int = retVal UIApplicationMain (argc, argv, nul, @ "SecondAppAppDelegate");

; [Communiqué de piscine];
retourner retVal;
}

Ouvrez SecondAppAppDelegate.me puis nous créons la fenêtre principale via le code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void ) applicationDidFinishLaunching : ( UIApplication * ) application { - (Void) applicationDidFinishLaunching: (UIApplication *) application {

/ / Retourne la taille de l'écran (320, 480)
UIScreen mainScreen ] applicationFrame ] ; CGRect windowRect = [[mainScreen UIScreen] applicationFrame];
/ / Créer une fenêtre - comme nous l'avons fait bye bye à Interface Builder
[ [ UIWindow alloc ] initWithFrame : windowRect ] ; UIWindow mainWindow * = [[UIWindow alloc] initWithFrame: windowRect];
/ / Définit l'arrière-plan de la fenêtre au jaune, à la différence
/ / Le FirstApp demande antérieure
[ UIColor yellowColor ] ] ; [SetBackgroundColor MainWindow: [UIColor yellowColor]];

mainWindow ] ; [Self setWindow: mainWindow];
; [Fenêtre makeKeyAndVisible];

; [MainWindow release];
}

Vous pouvez déjà tester l'application, si une fenêtre apparaît en jaune vous avez tout fait correctement!

, necessario solo se si usa Interface Builder. Dans le fichier SecondAppAppDelegate.h nous pouvons éliminer IBOutlet , n'est nécessaire que si vous utilisez Interface Builder. En outre ajouter ici que nos variables globales, la dernière fois nous étions entrés dans le contrôleur. Ensuite, modifiez le fichier SecondAppAppDelegate.h :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Import <UIKit/UIKit.h>

NSObject <UIApplicationDelegate> { SecondAppAppDelegate Interface @: NSObject {<UIApplicationDelegate>
UIWindow * fenêtre;

UITextField * nombre;
UIButton * bouton;
int numeroACaso;
}

nonatomic, retain ) UIWindow * window; @ La propriété (nonatomic, conserver) UIWindow * fenêtre;

void ) controllaNumero; - (Void) getNumber;

@ Fin

, in quanto non stiamo usando Interface Builder. Dans ce cas également, nous avons préparé la définition de méthode controllaNumero , comme la dernière fois, mais nous avons éliminé l'indication IBAction , puisque nous ne sommes pas en utilisant Interface Builder.

Nous construisons le code de l'interface

Il est temps de créer le code en utilisant tous les composants de notre interface. ed inseriamo il seguente codice: Nous reviendrons sur le fichier SecondAppAppDelegate.m , posizioniamoci avant [mainWindow release] et insérez le code suivant:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/ / Créer la barre de titre
[ [ UINavigationBar alloc ] initWithFrame : CGRectMake ( 0.0 , 0.0 , 320.0 , 44.0 ) ] ; UINavigationBar myNavigationBar * = [[UINavigationBar alloc] initWithFrame: CGRectMake (0.0, 0.0, 320.0, 44.0)];
myNavigationBar.barStyle = UIBarStyleDefault;
[ [ UINavigationItem alloc ] initWithTitle : @ "Indovina un numero" ] ; UINavigationItem navigationItem * = [[UINavigationItem alloc] initWithTitle: @ "Devinez un nombre"];
navigationItem animated : NO ] ; [MyNavigationBar pushNavigationItem: navigationItem animé: NO];
myNavigationBar ] ; [Fenêtre addSubview: myNavigationBar];

/ / Création de l'étiquette
[ [ UILabel alloc ] initWithFrame : CGRectMake ( 10 , 50 , 300 , 80 ) ] ; UILabel MyLabel * = [[UILabel alloc] initWithFrame: CGRectMake (10, 50, 300, 80)];
UIColor clearColor ] ; myLabel.backgroundColor = [UIColor clearColor];
; myLabel.numberOfLines = 2;
"iPhone ha pensato un numero da 1 a 10, prova ad indovinarlo?" ; myLabel.text = @ "iPhone a conçu un certain nombre de 1 à 10, essayer de deviner?"
myLabel ] ; [Fenêtre addSubview: MyLabel];

/ / Créer la saisie de texte
UITextField alloc ] initWithFrame : CGRectMake ( 10 , 120 , 300 , 30 ) ] ; = nombre [[UITextField alloc] initWithFrame: CGRectMake (10, 120, 300, 30)];
numero.borderStyle = UITextBorderStyleRoundedRect;
numero.textAlignment = UITextAlignmentCenter;
numero.keyboardType = UIKeyboardTypeNumberPad;
"Inserisci il numero" ; numero.placeholder = @ "Entrez le numéro de";
numero ] ; [Fenêtre addSubview: nombre];

/ / Créer le bouton
UIButton buttonWithType : UIButtonTypeRoundedRect ] ; button = [UIButton buttonWithType: UIButtonTypeRoundedRect];
10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30);
@ "Premi qui" forState : UIControlStateNormal ] ; [Button setTitle: @ "Cliquez ici" forState: UIControlStateNormal];
self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; [Bouton AddTarget: action d'auto: @ selector (getNumber) forControlEvents: UIControlEventTouchUpInside];
bottone ] ; [Fenêtre addSubview: le bouton];

; [MyLabel release];
; [NavigationItem release];
; [MyNavigationBar release];

della scorsa volta, subito dopo il [mainWindow release]; inseriamo: Depuis la « applicationDidFinishLaunching correspond à viewDidLoad que la dernière fois, juste après le [mainWindow release]; insérer:

1
+ arc4random ( ) % 10 ; numeroACaso = 1 + arc4random () est 10%;

Maintenant, nous pouvons faire est de mettre en œuvre la méthode controllaNumero , qui sera identique (à l'exception du prototype) à celle utilisée la dernière fois:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void ) controllaNumero { - (Void) {getNumber
"Premuto bottone di controlla numero" ) ; NSLog (@ "nombre Pressé de contrôle sur le bouton");
[ numero.text integerValue ] ; numeroInserito int = [numero.text integerValue];
message; NSString * message;
"Il numero inserito è %d" , numeroInserito ) ; NSLog (@ "Le numéro saisi est% d", numeroInserito);
numeroInserito <numeroACaso ) { si (numeroInserito <numeroACaso) {
"Troppo basso..." ; message = @ "trop ​​faible ...";
( numeroInserito> numeroACaso ) { } Else if (numeroInserito> numeroACaso) {
"Troppo alto..." ; message = @ "trop ​​élevé ...";
( numeroInserito == numeroACaso ) { } Else if (numeroInserito numeroACaso ==) {
"Bravo hai indovinato" ; message = @ "Bravo vous avez deviné";
+ arc4random ( ) % 10 ; numeroACaso = 1 + arc4random () est 10%;
"Numero pensato %d" , numeroACaso ) ; NSLog (@ "% Nombre d pensé," numeroACaso);
}
[ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc]
"Responso" initWithTitle: @ "Réponse"
message: message
délégué: néant
"OK" cancelButtonTitle: @ "OK"
] ; otherButtonTitles: nil];
; [AlertMessaggio spectacle];
; [AlertMessaggio release];
"" ; numero.text @ = "";
}

Nous en avons terminé!

Conclusions et considérations

, proprio perchè volevo lasciarlo il più semplice e snello possibile e, anche, per dimostrare che non sono elementi sempre necessari. Cet exemple ne fait pas l'utilisation directe d'un UIView ou UIViewController , parce que je voulais le laisser aussi simple et rationnel que possible et, aussi, de montrer que les éléments ne sont pas toujours nécessaires. Cependant, l'insertion d'objets directement dans la fenêtre peut avoir un certain sens dans cet exemple et d'autres contextes sporadiques. portano comunque benefici in tantissimi altri casi, ein alcuni sono praticamente indispensabili; come avremo modo di vedere in futuro. L'utilisation de UIView et UIViewController encore apporter des avantages dans de nombreux autres cas, etdans certains sont presque indispensable, comme nous le verrons dans le futur.

En savoir plus ...

iPhone FirstApp: Devinez le nombre - Partie 1

La première source que je suis allé dans ses mains a été écrit en Basic et se composait de quelques lignes de code, de m'avoir éclairé. C'était un jeu simple qui a généré un nombre aléatoire de 1 à 10 et, à travers l'entrée au clavier, a prouvé que le nombre entré est Maggione, inférieur ou égal au nombre aléatoire. En dépit de sa rude simplicité reste, pour moi, l'un des meilleurs exemples - simple, ludique et pratique - pour expliquer à ceux qui ne savent rien sur la programmation qu'entend-on réellement pour «programme d'ordinateur". J'ai donc décidé de le proposer pour l'iPhone d'Apple, peut-être aidera quelqu'un ...

En savoir plus ...


Arrêtez SOPA