Artikel Tagged 'Xcode'


Wie man Bilder und Ansichten in Interface Builder finden

Nach der Erläuterung , wie wir unsere Saiten in Xcode zu finden , ist es einfach, jetzt, wie zu sehen - durch die Anwendung der gleichen Technik - zu lokalisieren und Betrachtung von Bildern / interfaces mit Interface Builder erstellt.

Suchen Sie Graphik-Ressourcen

Der Prozess, wie erwähnt, ist die gleiche, wenn wir ein Bild bereits in unsere Ressourcen enthalten sind, oder sie setzen einen neuen ein, und wir wollen "locate" - das heißt, auf zwei oder mehr Bilder auf Basis der unterstützten Sprachen zu verwalten - klicken Sie einfach auf den Button Bild rechts ( Adium.png in diesem Beispiel), und wählen Sie Get Info:

Make File Localizable wir in der unteren linken Seite klicken.

Wir klicken Sie auf Hinzufügen und fügen Localization Italian :

Um zu erhalten:

esattamente come accadeva con il testo: Unser Bild bewegt wird (physisch, eines der seltenen Male, wenn das passiert nell'alberatura Xcode auf dem Dateisystem wird reflektiert) unter virtuellen Ordnern English.lproj und Italian.lproj genau wie mit dem Text passiert:

contiene una stessa versione dell'immagine. An dieser Stelle jeden der Ordner English.lproj und Italian.lproj enthält die gleiche Version des Bildes. Standardmäßig - - die englische Version Dieses Bild ist in Interface Builder, wo wir sehen, manipuliert.
An diesem Punkt einfach überschreiben einer (oder beide Dateien Adium.png ) zu einem Ort der Bilder "flash" erhalten.

Suchen Sie die Dateien XIB

Auch die Schnittstellen mit Interface Builder gebaut werden können in ihrer Gesamtheit entfernt werden, wenn es für notwendig erachtet wird. ) con interfaccia XIB , lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano: Das Verfahren ist identisch mit dem grafischen Fähigkeiten durchgeführt: Fügen Sie ein ViewController (wie infoViewController ) XIB-Schnittstelle, wählen Sie es aus, wählen Sie Get Info aus dem Kontextmenü, geben Sie der Datei lokalisierbar, fügen Sie die italienische Lokalisierung:

ViewController

Klicken Italiano oder Italienisch öffnet Interface Builder! ) all'interno della classica cartella Classes . Dieses Mal das Dateisystem, werden Sie feststellen, dass Sie zwei Verzeichnisse (erstellt English.lproj und Italian.lproj ) innerhalb der klassischen Klassen-Ordner. Beide haben ihre Dateien infoViewController.xib . Der Komfort in diesem, deutlich in den Code behoben, und wann wir unsere Controller-Code instanziieren wir eine "saubere" wie diese haben:

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

Wie Sie sehen können gibt es keine Spur von Aussage über die Lage, völlig vom System verwaltet. Die beiden Schnittstellen, natürlich, können ganz unterschiedlich sein, wie wirksam sind als zwei separate XIB-Datei.

Fortsetzung ...

10 Nützliche Tricks und Snippets für Apple iPhone und Xcode

1. Strings über mehrere Zeilen

In Xcode, können Sie "Pause" ein String über mehrere Zeilen, indem Sie am Ende mit einem Backslash "\". Diese Funktion kann nützlich sein, wenn wir zum Beispiel den HTML-Text in einem Steuerelement einfügen möchten UIWebView :

Fortsetzung ...

Sehr kurze Trick: 3 Tricks für Entwickler Apple iPhone

Anwendung Icon

57 × 57 Pixel-Symbol, das stellen unsere Anwendung "beeinträchtigt" durch das Apple iPhone automatisch: Sie fügen eine abgerundete Kante, eine helle und 3D-Effekte. Diese Einstellung kann durch Auswahl der Datei geändert werden [nome applicazione]-Info.plist und Hinzufügen der Eigenschaft "Icon umfasst Glanz-und Kegel-Effekte bereits":

Fortsetzung ...

XCode Objective-C: Nützliche Tastenkombinationen

XCode ist eine sehr leistungsfähige Entwicklungsumgebung und behält einige Überraschungen. Es ermöglicht eine ähnliche Funktion wie "Schnipsel" des berühmten Editor TextMate . In der Praxis ist es möglich, Code-Blöcke mit der Sequenz ESC + eine Kombination aus einer oder mehreren Sequenzen von Zeichen einzufügen. e otterrete: Zum Beispiel, wenn Sie einen Block einfügen möchten if versuchen Sie ESC+if und Sie erhalten:

Immagine 3

. Wie in der Abbildung gezeigt, wird ein Menü (das gleiche auto-completion), wo Sie zwischen einem einfachen Block wählen können if oder if/else . Mit einem Klick auf "Senden" erhalten Sie:

Immagine 4

Hier sind zwei Links für die vollständige Liste der Tastaturkürzel:

Fortsetzung ...

Objective-C: eine Alternative zur Verwendung CGRectMake

CGRectMake() ist eine Funktion (eigentlich ein Inline # define) verwendet eine Menge vor allem, wenn Sie Grafik-Objekte aus dem Code oder Benutzeroberfläche zu erstellen. o UIImageView . CGRectMake() restituisce una struct (struttura di tipo) CGRect : Seine Verwendung ist daher oft die Initialisierung Komponenten verbunden UIKit , sondern auch auf einfache UIView oder UIImageView . CGRectMake() gibt ein struct (Struktur-Typ) CGRect :

1
2
3
4
5
struct {CGRect
CGPoint Ursprungs;
CGSize Größe;
};
typedef struct CGRect CGRect;

: Die wiederum aus zwei verschiedenen struct zusammen CGPoint und CGSize :

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

/ * Größen. * /

struct {CGSize
CGFloat Breite;
CGFloat Höhe;
};
typedef struct CGSize CGSize;

. Das wiederum, wieder enthalten Typen CGFloat oder Typ float . Wenn wir analysieren den Code von CGRectMake () sind:

1
2
3
4
5
6
7
8
CG_INLINE CGRect
CGRectMake (CGFloat x, y CGFloat, CGFloat Breite, Höhe CGFloat)
{
CGRect rect;
y; rect.origin.x = x, y = rect.origin.y;
height; rect.size.width = width, height = rect.size.height;
Rückkehr rect;
}

Daraus folgt, dass dieses Stück 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];

Es könnte zu Recht geschrieben werden als:

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];

Nur um die Dinge zu beschleunigen "der Code ausgeführt wird ... :)

Fortsetzung ...

Xcode Verknüpfung

Xcode ist eine wirklich gute Entwicklungsumgebung, schön und voller Details, die das Schreiben effizienter Code und angenehmer machen. Unter diesen ist die Leichtigkeit der automatischen Vervollständigung bei der Eingabe, insbesondere beim Schreiben von Anwendungen für Apple iPhone, wo die Rahmenbedingungen sind vielfältig und erinnern Syntax und Nomenklatur Unternehmens durch ein paar.

Fortsetzung ...

Xcode: Debugging Tipps Preferences

Mit der Xcode-Einstellungen können Sie das Verhalten der Atmosphäre während des Debugging-Phase einer iPhone-Applikation eingestellt. Die Standardeinstellungen in der Tat sehr unangenehm, wenn Sie versuchen, versuchen Sie es erneut einen Antrag, zum Beispiel nach dem Start unserer Applikation, müssen Sie manuell öffnen Sie das Fenster für die Konsole auf den Ausgang verschiedener siehe NSLog() . Xcode lässt auch den vorherigen Sitzungen, um uns zu zwingen, das Fenster von Hand zu reinigen. Glücklicherweise können Sie das Problem, indem sie auf die Einstellungen zu lösen:

xcode-preferences

Wie oben gezeigt, wählen Sie einfach ein Element aus dem Menü auf Start, um zu entscheiden, welche Debug-Fenster automatisch geöffnet beim Start unserer gültig, wenn (I & Debugger Console eingestellt, aber Sie diejenigen, die am besten Sie wählen können). Auf der rechten Seite, dann finden wir Auto Clear Debug-Konsole, so dass Sie immer mit einem sauberen Konsole zu starten.

Fortsetzung ...

iPhone SecondApp: Guess der Zahl - Teil 2

Wie bereits erwähnt FirstApp iPhone: Guess der Zahl - Teil 1 sehen wir, wie Sie eine Anwendung für das Apple iPhone ohne Interface Builder zu machen! In der Tat werden wir beseitigen physischen Dateien, die von Interface Builder, Xcode-Assistenten erstellt. Am Ende von diesem Post, dann haben wir eine Anwendung in jeder Hinsicht identisch, wie in der ersten Hälfte erreicht, mit dem Unterschied, dass wir alle unsere visuelle Komponenten, darunter das Hauptfenster, vollständig zu erreichen, um Code.

Die Anwendung bereits, wenn Sie gerade herunterladen möchten, gibt es auf meiner Google-Code-Repository:

Ich möchte darauf hinweisen, sofort als ZIP diesem Beispiel mit einem Gewicht von weniger als das letzte Mal! :)

Wir schaffen das Projekt

Wir beginnen mit der Erstellung unseres Projektes SecondApp (um es von FirstApp zu unterscheiden), obwohl dieses Zeitfenster-basierten Anwendung zu wählen:

newproject

Nun wollen wir löschen alles, was mit Interface Builder. : eliminatelo anche dal file system, quindi selezionate Also Move to Trash . Löschen Sie die Datei MainWindow.xib , in den Ordner Resources : auch löschen aus dem Dateisystem, und wählen Sie dann auch den Papierkorb verschieben. nella casella Main nib file base name : Wählen Sie dann die Datei SecondoApp-info.plist und löschen Sie den Verweis auf die MainWindow nib box Main-base file name:

deleteib

An diesem Punkt haben wir nicht mehr jedem Windows-, zumindest über Interface Builder. , e modifichiamo la funzione main() in questo modo: So öffnen wir die Datei main.m , in Lage Other Sources , und ändern Sie die Funktion main() wie folgt aus:

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];

/ / Durch das Entfernen der Datei. XIB verpassten wir den Punkt
/ / Delegierter des JPA, dann übergeben Sie es an "Hand"
UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int retVal = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate");

; [Pool release];
Rückkehr retVal;
}

Öffnen SecondAppAppDelegate.me erstellen Sie dann im Hauptfenster in Code:

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

/ / Holen Sie sich die Bildschirmgröße (320, 480)
UIScreen mainScreen ] applicationFrame ] ; CGRect windowRect = [[UIScreen Hauptseite] applicationFrame];
/ / Fenster erzeugen - wie wir in Interface Builder getan haben bye bye
[ [ UIWindow alloc ] initWithFrame : windowRect ] ; MainWindow UIWindow * = [[UIWindow alloc] initWithFrame: windowRect];
/ / Stellen Sie die Hintergrundfarbe des Fensters zu gelb, zu differenzieren
/ / Die bisherige Anwendung FirstApp
[ UIColor yellowColor ] ] ; [MainWindow setBackgroundColor: [UIColor yellowColor]];

mainWindow ] ; [Self setWindow: MainWindow];
; [Window makeKeyAndVisible];

; [MainWindow release];
}

Sie können bereits die Anwendung zu testen, wenn Sie ein gelbes Fenster hast du alles richtig machen!

, necessario solo se si usa Interface Builder. In der Datei SecondAppAppDelegate.h können wir beseitigen IBOutlet nur erforderlich, wenn Sie Interface Builder verwenden. Auch hier hinzufügen, dass unsere globale Variablen, die letzte Zeit, die wir in den Controller eingegeben hatte. Dann ändern Sie die Datei SecondAppAppDelegate.h :

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

NSObject <UIApplicationDelegate> { @ Interface SecondAppAppDelegate: NSObject {<UIApplicationDelegate>
UIWindow * window;

UITextField * Zahl;
UIButton * Taste;
numeroACaso int;
}

nonatomic, retain ) UIWindow * window; @ Property (atomare, behalten) UIWindow * window;

void ) controllaNumero; - (Void) getNumber;

@ End

, in quanto non stiamo usando Interface Builder. Wieder haben wir die Definition der Methode zubereitet controllaNumero , wie beim letzten Mal, aber wir haben den Hinweis beseitigt IBAction , weil Sie sich nicht mit Interface Builder.

Wir bilden die Schnittstelle von Code

Es ist Zeit, um Code mit allen Komponenten unserer Schnittstelle zu erstellen. ed inseriamo il seguente codice: Gehen wir zurück zu der Datei SecondAppAppDelegate.m , posizioniamoci vor [mainWindow release] und fügen Sie den folgenden Code ein:

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
/ / Erstellen der Titelleiste
[ [ 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: @ "Guess eine Reihe"];
navigationItem animated : NO ] ; [MyNavigationBar pushNavigationItem: navigationItem animated: NO];
myNavigationBar ] ; [Window addSubview: myNavigationBar];

/ / Erstellen der Etiketten
[ [ 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 = @ "Das iPhone hat eine Reihe von 1 bis 10 konzipiert, versuchen zu erraten?"
myLabel ] ; [Window addSubview: myLabel];

/ / Erstellen von Text-Eingabe
UITextField alloc ] initWithFrame : CGRectMake ( 10 , 120 , 300 , 30 ) ] ; number = [[UITextField alloc] initWithFrame: CGRectMake (10, 120, 300, 30)];
numero.borderStyle = UITextBorderStyleRoundedRect;
numero.textAlignment = UITextAlignmentCenter;
numero.keyboardType = UIKeyboardTypeNumberPad;
"Inserisci il numero" ; numero.placeholder = @ "Geben Sie die Nummer";
numero ] ; [Window addSubview: number];

/ / Erstellen der Taste
UIButton buttonWithType : UIButtonTypeRoundedRect ] ; button = [UIButton buttonWithType: UIButtonTypeRoundedRect];
10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30);
@ "Premi qui" forState : UIControlStateNormal ] ; [Button setTitle: @ "Hier klicken" Forst: UIControlStateNormal];
self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; [AddTarget Button: self Aktion: @ selector (getNumber) forControlEvents: UIControlEventTouchUpInside];
bottone ] ; [Window addSubview: Taste];

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

della scorsa volta, subito dopo il [mainWindow release]; inseriamo: Da die " applicationDidFinishLaunching entspricht viewDidLoad wie beim letzten Mal, kurz nach der [mainWindow release]; einzufügen:

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

Jetzt können wir tun, ist die Methode zu implementieren controllaNumero , die gleich wird (abgesehen von den Prototyp) zu, die verwendet werden letzte Mal:

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 (@ "-Taste gedrückt Kontrollnummer");
[ numero.text integerValue ] ; numeroInserito = int [numero.text integerWert];
message; NSString * message;
"Il numero inserito è %d" , numeroInserito ) ; NSLog (@ "Die eingegebene Zahl ist% d", numeroInserito);
numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) {
"Troppo basso..." ; message = @ "Too Low ...";
( numeroInserito> numeroACaso ) { } Else if (numeroInserito> numeroACaso) {
"Troppo alto..." ; message = @ "Zu hohe ...";
( numeroInserito == numeroACaso ) { } Else if (numeroInserito numeroACaso ==) {
"Bravo hai indovinato" ; message = @ "Bravo Sie haben es erraten";
+ arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%;
"Numero pensato %d" , numeroACaso ) ; NSLog (@ "Number% d dachte:" numeroACaso);
}
[ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc]
"Responso" initWithTitle: @ "Response"
Nachricht: Nachricht
Delegierter: nil
"OK" cancelButtonTitle: @ "OK"
] ; otherButtonTitles: nil];
; [AlertMessaggio show];
; [AlertMessaggio release];
"" ; numero.text @ = "";
}

Wir sind fertig!

Schlussfolgerungen und Überlegungen

, proprio perchè volevo lasciarlo il più semplice e snello possibile e, anche, per dimostrare che non sono elementi sempre necessari. Dieses Beispiel macht nicht den direkten Einsatz eines UIView oder UIViewController , nur weil ich überlasse es so einfach und einheitlich wie möglich wollte und auch, um zu zeigen, dass die Elemente nicht immer notwendig. Allerdings Einfügen von Objekten direkt in das Fenster kann einen Sinn haben in diesem Beispiel und andere sporadische Kontexten. portano comunque benefici in tantissimi altri casi, ein alcuni sono praticamente indispensabili; come avremo modo di vedere in futuro. Die Verwendung von UIView und UIViewController Vorteile bringen in vielen anderen Fällen jedoch sind einige nahezu unverzichtbar Ein, wie wir in die Zukunft sehen.

Fortsetzung ...

XCode: organisieren Sie Ihren Code mit der # pragma markiert

XCode ist eine sehr leistungsstarke und vielseitige und bietet dem Programmierer mit vielen nützlichen Features und einfach zu bedienen. Beim Schreiben von komplexem Code, oder zumindest artikuliert, ist es wichtig, Ihren Code zu organisieren, so dass Sie nicht verschwenden keine Zeit Suchfunktionen in langen Zeilen Code zu verbreiten. Nach kommentieren, die erste und wichtigste Sache zu tun, bietet die Umgebung XCode-Richtlinien (nice), um die Nutzbarkeit und legginilità innerhalb der Entwicklung zu verbessern. Eines davon ist die Richtlinie #pragma mark , die sehr nützlich bei der Organisation von Gruppen der Code und Methoden wird.

In der Abbildung unten sehen Sie den Code Teil meines Projektes PragmaTest :

pragmamark-1

Die Top-Dropdown-Menü können Sie alle Methoden der Klasse Liste. Nun, wenn wir unsere Methode insert über die Richtlinie #pragma mark das eine Syntax:

1
# Pragma Marke {label}

Wir erhalten:

pragmamark-2

Die erste #pragma mark mit einem Bindestrich (-) fügt eine Trennlinie. Der zweite ist ein Text (Label) zu schmecken. Sie können die folgende Anweisung hinzu, wo Sie wollen, organisieren Sie den Code, wie Sie sehen, passen. Sie können pragmatischer Zeilen ein:

1
2
3
4
5
6
# Pragma Marke -
# Pragma mark / **
# Pragma markiert * Mit dem Pragma
# Pragma Markierung * auf mehreren Zeilen Code
# Pragma Zeichen * /
void ) mioMetodo { } - (Void) {} myMethod

Fortsetzung ...

XCode 3.1.3: Wiederherstellen der 2.2.1 SDK

Nur für registrierte Entwickler haben bereits eine neue Version des SDK für das iPhone veröffentlicht, so ist es Zeit, die 3.0 SDK installieren, damit die Aktualisierung der gesamten Entwicklungsumgebung XCode auf Version 3.1.3. Wenn Sie bereits aktualisiert haben Sie bemerkt, dass die Schaffung eines neuen Projekts scheinen zu fehlen die alten SDK 2.2.1 (einschließlich anderer) haben.

xcode313

In der Tat ist es alles hier auf unserer Maschine können nur einen einfachen Verfahren auf magische Weise wieder alle unsere bisherigen SDK, so probieren Sie unsere Anwendung für das Apple iPhone ist der SDK 3.0, die mit früheren Versionen 2.2.1 und niedriger. Wählen Sie das Projekt, öffnen Sie das Kontextmenü und wählen Sie Get Info:

xcode131menu

In dem Fenster, öffnet sich zuerst in der Registerkarte Allgemein, wählen Sie die untere Base SDK für alle Konfigurationen und restauriert SDK 2.2.1 (oder was auch immer).

xcode313info

Ohne das magische, wird das Menü wieder alle XCode SDK 3.0 inklusive

xcode313ok

Fortsetzung ...