Articles taggés avec 'Xcode »


Comment localiser les images et les vues dans Interface Builder

Après avoir expliqué comment localiser nos chaînes dans Xcode , il est facile de voir maintenant comment - en appliquant la même technique - de localiser et de visualiser des images / interfaces créées avec Interface Builder.

Localiser les ressources graphiques

Le processus, tel que mentionné, est la même, si nous avons une image déjà inclus dans nos ressources, ou qu'ils insèrent un nouveau, et nous voulons de «localiser» - qui est, de gérer deux ou plusieurs images sur la base des langues prises en charge - il suffit de cliquer sur le bouton Image de droite ( Adium.png dans cet exemple) et sélectionnez Get Info:

Créer un fichier localisable on clique en bas à gauche.

On clique sur Ajouter et insérez la localisation Italian :

Afin d'obtenir:

esattamente come accadeva con il testo: Notre image est déplacée (physiquement, l'une des rares fois où cela arrive nell'alberatura Xcode est réfléchi sur le système de fichiers) dans le cadre des dossiers virtuels English.lproj et Italian.lproj exactement comme cela s'est produit avec le texte:

contiene una stessa versione dell'immagine. A ce stade, chacun des dossiers English.lproj et Italian.lproj contient la même version de l'image. Cette image est manipulée dans Interface Builder, où nous verrons - par défaut - la version anglaise.
À ce stade, juste écraser un (ou deux fichiers Adium.png ) pour obtenir un emplacement d'images «flash».

Localisez le fichier XIB

Même les interfaces construites avec Interface Builder peuvent être situés dans leur intégralité, lorsque cela est jugé nécessaire. ) con interfaccia XIB , lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano: La procédure est identique à celui effectué avec les capacités graphiques: ajouter un ViewController (par exemple infoViewController ) interface XIB, nous le sélectionner, choisissez Obtenir des informations dans le menu contextuel, donner l'localisables fichier, ajoutez la localisation italienne:

ViewController

En cliquant ou en italien Italiano va ouvrir Interface Builder! ) all'interno della classica cartella Classes . Cette fois, le système de fichiers, vous remarquerez que vous avez créé deux répertoires ( English.lproj et Italian.lproj ) dans le dossier classes classiques. Les deux auront leurs fichiers infoViewController.xib . Le confort dans ce domaine, clairement résolue dans le code, et quand nous allons instancier notre code du contrôleur, nous aurons un «propre» comme ceci:

1
2
[ InfoViewController alloc ] ; InfoViewController * info = [InfoViewController alloc];
info.view ] ; [Self.view addSubview: info.view];

Comme vous pouvez le voir il n'ya aucune trace d'aucune déclaration concernant l'emplacement, entièrement gérées par le système. Les deux interfaces, bien sûr, peuvent être complètement différents, qui sont en vigueur que deux fichiers séparés XIB.

Suite ...

10 astuces utiles et des extraits pour Apple iPhone et Xcode

1. Chaînes 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 :

Suite ...

Astuce très courte: 3 astuces pour les développeurs iPhone d'Apple

Application Icon

57 × 57 pixels icône qui représentera notre application est «altérée» par l'iPhone d'Apple automatiquement: vous ajoutez un bord arrondi, un des effets lumineux et 3D. Ce réglage peut être modifié en sélectionnant le fichier [nome applicazione]-Info.plist et en ajoutant la propriété "Icon inclut les effets de brillance et de biseau déjà»:

Suite ...

XCode Objective-C: les raccourcis clavier utiles

Xcode est un environnement de développement très puissant et se réserve quelques surprises. Il permet une fonction similaire à "snippets" de la célèbre éditeur TextMate . En pratique, il est possible d'insérer des blocs de code en utilisant la séquence + ESC une combinaison d'une ou plusieurs séquences de caractères. e otterrete: Par exemple, si vous voulez insérer un bloc if essayez d'appuyer sur ESC+if et vous obtiendrez:

Immagine 3

. Comme le montre la figure, un menu apparaît (le même auto-complétion) où vous pouvez choisir entre un simple bloc if ou if/else . En cliquant sur "envoyer", vous obtenez:

Immagine 4

Voici deux liens pour la liste complète des raccourcis clavier:

Suite ...

Objective-C: une alternative à l'utilisation CGRectMake

CGRectMake() est une fonction (en fait une ligne # define) utilisé beaucoup surtout quand vous créez des objets graphiques à partir du code ou de l'interface utilisateur. o UIImageView . CGRectMake() restituisce una struct (struttura di tipo) CGRect : Son utilisation est donc souvent associé composants d'initialisation de UIKit , mais aussi de simples UIView ou UIImageView . CGRectMake() retourne une struct (type de structure) CGRect :

1
2
3
4
5
struct {CGRect
CGPoint origine;
CGSize taille;
};
typedef struct CGRect CGRect;

: Qui à son tour est composée de deux différents struct CGPoint et CGSize :

1
2
3
4
5
6
7
8
9
10
11
12
13
struct {CGPoint
X CGFloat;
CGFloat y;
};
typedef struct CGPoint CGPoint;

Tailles / *. * /

struct {CGSize
Largeur CGFloat;
Hauteur CGFloat;
};
typedef struct CGSize CGSize;

. Cela, en retour, de nouveau, contiennent des types CGFloat ou le type float . Si nous analysons le code de CGRectMake () sont:

1
2
3
4
5
6
7
8
CG_INLINE CGRect
CGRectMake (CGFloat x, y CGFloat, largeur CGFloat, CGFloat hauteur)
{
CGRect rect;
y; rect.origin.x = x, y = rect.origin.y;
height; rect.size.width = largeur, hauteur = rect.size.height;
retour rect;
}

Il s'ensuit donc que ce morceau de code:

1
2
3
4
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton gbutton * = [UIButton buttonWithType: UIButtonTypeRoundedRect];
12 , 409 , 100 , 40 ) ; gbutton.frame = CGRectMake (12, 409, 100, 40);
@ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Presse" Forst: UIControlStateNormal];
gbutton ] ; [MainWindow addSubview: gbutton];

Il pourrait à juste titre être écrite comme:

1
2
3
4
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton gbutton * = [UIButton buttonWithType: UIButtonTypeRoundedRect];
CGRect ) { 12 , 409 , 100 , 40 } ; gbutton.frame = (CGRect) {12, 409, 100, 40};
@ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Presse" Forst: UIControlStateNormal];
gbutton ] ; [MainWindow addSubview: gbutton];

Juste pour accélérer les choses »le code est exécuté ... :)

Suite ...

Raccourci Xcode

Xcode est un environnement de développement vraiment bon, agréable et pleine de détails qui rendent l'écriture de code efficace et agréable. Parmi eux se trouve la facilité d'auto-complétion lors de la frappe, surtout quand écrire des applications pour l'iPhone d'Apple, où les cadres sont nombreux et n'oubliez pas la société de syntaxe et de la nomenclature par quelques-uns.

Suite ...

Xcode: Conseils de débogage sur Préférences

En utilisant les préférences de Xcode, vous pouvez définir le comportement de l'atmosphère pendant la phase de débogage d'une application iPhone. Les paramètres par défaut, en fait, sont très inconfortables lorsque vous essayez et essayez de nouveau une application, par exemple, après le lancement de notre application, vous devez ouvrir manuellement la fenêtre de console pour voir la sortie de divers NSLog() . Xcode permet également aux sessions précédentes, afin de nous forcer à nettoyer la fenêtre à la main. Heureusement, vous pouvez résoudre le problème en agissant sur les préférences:

xcode-preferences

Comme indiqué ci-dessus, il suffit de sélectionner un élément dans le menu de démarrage de décider quelle fenêtre de débogage à ouvrir automatiquement au démarrage de notre valide si (I & Debugger Console jeu mais vous pouvez choisir ceux que vous convient le mieux). Sur la droite, puis on trouve la console de débogage Auto Clear, vous commencez toujours avec une console propre.

Suite ...

iPhone SecondApp: Devinez le nombre - Partie 2

Comme mentionné iPhone FirstApp: Devinez le nombre - Partie 1 , nous voyons comment faire une application pour 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, à celle obtenue dans la première partie, avec la différence que nous allons atteindre tous nos composants visuels, y compris la fenêtre principale, complètement à code.

L'application déjà fait, si vous voulez juste à télécharger, est disponible sur mon référentiel Google Code:

Je tiens à signaler immédiatement que la ZIP de cet exemple un poids inférieur à la dernière fois! :)

Nous créons le projet

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

newproject

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

deleteib

A ce stade, nous n'avons plus de n'importe quel ordinateur Windows, au moins par Interface Builder. , e modifichiamo la funzione main() in questo modo: Nous avons donc ouvrir 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 manqué le point
/ / Délégué à l'APP, puis le passer à «la main»
UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int RETVAL = UIApplicationMain (argc, argv, nul, @ "SecondAppAppDelegate");

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

Ouvrez SecondAppAppDelegate.me puis créer la fenêtre principale dans le code suivant:

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 = [[Ecran UIScreen] applicationFrame];
/ / Création d'une fenêtre - comme nous l'avons fait dans Interface Builder bye bye
[ [ UIWindow alloc ] initWithFrame : windowRect ] ; MainWindow UIWindow * = [[UIWindow alloc] initWithFrame: windowRect];
/ / Définir le fond de la fenêtre au jaune, à différencier
/ / La 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 vous obtenez une fenêtre jaune vous avez tout fait correctement!

, necessario solo se si usa Interface Builder. Dans le fichier SecondAppAppDelegate.h nous pouvons éliminer IBOutlet , uniquement nécessaire si vous utilisez Interface Builder. Également ajouter ici que nos variables globales, la dernière fois que nous étions entrés dans le contrôleur. Puis modifier 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;
numeroACaso int;
}

nonatomic, retain ) UIWindow * window; @ Property (nonatomic, retenir) UIWindow * fenêtre;

void ) controllaNumero; - (Void) getNumber;

@ Fin

, in quanto non stiamo usando Interface Builder. Encore une fois, nous avons préparé la définition de méthode controllaNumero , comme la dernière fois, mais nous avons éliminé l'indication IBAction , parce que vous n'utilisez pas d'Interface Builder.

Nous construisons l'interface à partir du code

C'est le temps de créer du code à travers tous les composants de notre interface. ed inseriamo il seguente codice: Revenons au 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éation de 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 numéro de 1 à 10, essayez de deviner?"
myLabel ] ; [Fenêtre addSubview: MyLabel];

/ / Création de 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";
numero ] ; [Fenêtre addSubview: nombre];

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

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

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

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

Maintenant, nous pouvons faire est de mettre en œuvre la méthode controllaNumero , qui sera identique (à part le prototype) à ce moment-là utilisé en dernier:

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é contrô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 ) { if (numeroInserito <numeroACaso) {
"Troppo basso..." ; message = @ "Trop peu ...";
( numeroInserito> numeroACaso ) { } Else if (numeroInserito> numeroACaso) {
"Troppo alto..." ; message = @ "Trop haut ...";
( numeroInserito == numeroACaso ) { } Else if (numeroInserito numeroACaso ==) {
"Bravo hai indovinato" ; message = @ "Bravo, vous avez deviné»;
+ arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%;
"Numero pensato %d" , numeroACaso ) ; NSLog (@ "% d Nombre pensé," numeroACaso);
}
[ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc]
"Responso" initWithTitle: @ "Réponse"
message: message
déléguée: 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 une utilisation directe d'un UIView ou UIViewController , juste parce que je voulais quitter ce aussi simple et rationnel que possible et, aussi, de montrer que les éléments ne sont pas toujours nécessaires. Toutefois insérer des 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 apporter des avantages dans de nombreux autres cas, cependant, certaines sont pratiquement indispensables ein, comme nous le verrons dans le futur.

Suite ...

XCode: organiser votre code avec la marque # pragma

XCode est un très puissant et polyvalent et permet au programmeur de nombreuses fonctions utiles et simples à utiliser. Lors de l'écriture de code complexe, ou au moins articulées, il devient important d'organiser votre code de sorte que vous ne perdez pas de temps à chercher les fonctions réparties dans les longues lignes de code. Après avoir commenté, la première chose et la plus importante à faire, l'environnement fournit des lignes directrices XCode (Nice) pour améliorer la convivialité et legginilità dans le développement. Une d'elles est la directive #pragma mark qui devient très utile dans l'organisation de groupes de code et des méthodes.

Dans l'image ci-dessous vous pouvez voir la partie de code de mon projet PragmaTest :

pragmamark-1

Le menu du haut déroulant vous permet de lister toutes les méthodes de notre classe. Maintenant, si nous insérons notre méthode sur la directive #pragma mark qui a une syntaxe:

1
Marque # pragma {label}

Nous obtenons:

pragmamark-2

La première #pragma mark avec un tiret (-) insère une ligne de séparation. Le second est un texte (étiquette) au goût. Vous pouvez ajouter la déclaration suivante où vous voulez, en organisant le code comme bon vous semble. Vous pouvez entrer des lignes plus pragmatique, tapez:

1
2
3
4
5
6
Marque # pragma -
# Pragma mark / **
# * Mark Pragma utilisant le pragma
# * Mark Pragma sur plusieurs lignes de code
# Pragma mark * /
void ) mioMetodo { } - (Void) {} myMethod

Suite ...

XCode 3.1.3: Restaurer le SDK 2.2.1

Seulement pour les développeurs enregistrés ont déjà publié une nouvelle version du SDK pour l'iPhone d'Apple, il est donc temps pour installer le SDK 3.0, mettant ainsi à jour l'ensemble de l'environnement de développement XCode pour version 3.1.3. Si vous avez déjà mis à niveau, vous aurez remarqué que la création d'un nouveau projet semblent être absents de l'ancien SDK 2.2.1 (y compris les autres).

xcode313

En fait tout est là sur notre machine, vous pouvez simplement effectuer une procédure simple pour restaurer magie tous nos SDK précédente, alors essayez notre application pour l'iPhone d'Apple est le 3.0 SDK qui avec les versions précédentes 2.2.1 et inférieures. Sélectionnez le projet, ouvrez le menu contextuel et choisissez Obtenir des informations:

xcode131menu

Dans la fenêtre qui s'ouvre, d'abord dans l'onglet Général, sélectionnez le SDK de base inférieur à toutes les configurations et restauré 2.2.1 (ou autre) SDK.

xcode313info

Sans cela, comme par magie, le menu s'affiche à nouveau toutes les XCode SDK dont 3,0

xcode313ok

Suite ...