iPhone SecondApp: Guess the number - Teil 2
Montag, 13. Juli 2009Wie in iPhone FirstApp erwartet: Guess the number - Teil 1 sehen wir, wie eine Anwendung für Apple iPhone ohne Interface Builder zu machen! In der Tat körperlich Löschen von Dateien von Xcode Interface Builder-Assistenten erstellt. Am Ende von diesem Post, dann werden wir einen Antrag in allen Punkten übereinstimmen müssen, dass im ersten Teil gemacht, mit dem Unterschied, dass wir das erreichen alle unsere visuellen Komponenten, einschließlich der wichtigsten Fenster, komplett auf Code.
Der Antrag bereits gestellt, wenn Sie nur herunterladen möchten, ist bei meinem Google-Code-Repository zur Verfügung:
Ich möchte darauf hinweisen sofort als ZIP-Code dieses Beispiels Gewichte weniger als das letzte Mal! ![]()
Erstellen Sie das Projekt
Wir beginnen unser Projekt zu schaffen SecondApp (um es von FirstApp zu unterscheiden), aber diesmal wählen Sie Fenster-basierte Anwendung:

Jetzt wollen wir alles zu entfernen, Interface Builder in Zusammenhang stehen. Löschen Sie die Datei MainWindow.xib in der Resources auch löschen Sie es aus dem Dateisystem, und wählen Sie dann auch den Mülleimer werfen. Mit einem Klick auf die Datei SecondoApp-info.plist und löschen Sie den Verweis auf MainWindow Abschnitt Main nib Datei Basisname:

An diesem Punkt haben wir keine Fenster, zumindest auf der Interface Builder. Dann öffnen Sie die Datei main.m in Other Sources und ändern Sie die Funktion main() wie folgt aus:
- int argc, char * argv [ ] ) { int main (int argc, char * argv []) (
- pool = [ [ NSAutoreleasePool alloc ] init ] ; NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
- / / Nachdem die Datei. Chib verloren wir den Punkt gelöscht
- / / Delegierter des PPV, dann ändert sich in "Hand"
- UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int retVal = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate");
- ; [Schwimmbad release];
- return retVal;
- )
Dann öffnen wir SecondAppAppDelegate.me schaffen das Hauptfenster über Code:
- ) applicationDidFinishLaunching : ( UIApplication * ) application { - (Void) applicationDidFinishLaunching: (UIApplication *) Anwendung (
- / / Get the screen size (320, 480)
- applicationFrame ] ; CGRect WindowRect = [[UIScreen Hauptseite] applicationFrame];
- / / Create a window - wie wir es bye bye to Interface Builder
- UIWindow alloc ] initWithFrame : windowRect ] ; UIWindow mainWindow * = [[UIWindow alloc] initWithFrame: WindowRect];
- / / Stellen Sie die Hintergrundfarbe des Fensters bis gelb, zu differenzieren
- / / Aus der früheren Anmeldung FirstApp
- UIColor yellowColor ] ] ; [MainWindow setBackgroundColor: [UIColor yellowColor]];
- mainWindow ] ; [Self setWindow: mainWindow];
- ; [Fenster makeKeyAndVisible];
- ; [MainWindow release];
- )
Sie können bereits testen Sie die Anwendung, wenn es ein gelbes Fenster, das Sie hat alles richtig gemacht!
In der Datei SecondAppAppDelegate.h können wir beseitigen IBOutlet nur erforderlich, wenn Sie Interface Builder. Fügen Sie auch hier unsere globale Variablen, die das letzte Mal hatten wir in der Controller eingesetzt. Dann bearbeiten Sie die Datei SecondAppAppDelegate.h
- # Import <UIKit/UIKit.h>
- UIWindow * window;
- UITextField * Anzahl;
- UIButton * button;
- int numeroACaso;
- )
- nonatomic, retain ) UIWindow * window; @ Property (atomare, behalten) UIWindow * window;
- ) controllaNumero; - (Void) controllaNumero;
- @ End
Wieder haben wir die Definition der Methode controllaNumero wie beim letzten Mal, aber wir haben die Angabe IBAction weil wir nicht verwenden, Interface Builder.
Wir bilden die Schnittstelle aus dem Code
Es ist Zeit zu schaffen Code mit allen Komponenten der Benutzeroberfläche. Wir kehren zurück, um die Datei SecondAppAppDelegate.m posizioniamoci vor [mainWindow release] und fügen Sie den folgenden Code ein:
- / / Create the 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 animiert: NO];
- myNavigationBar ] ; [Fenster addSubview: myNavigationBar];
- / / Create the label
- UILabel alloc ] initWithFrame : CGRectMake ( 10, 50, 300, 80 ) ] ; UILabel myLabel * = [[UILabel alloc] initWithFrame: CGRectMake (10, 50, 300, 80)];
- ; myLabel.backgroundColor = [UIColor clearColor];
- ; myLabel.numberOfLines = 2;
- ; myLabel.text = @ "iPhone hat eine Anzahl von 1 bis 10 gestaltet, versuchen zu erraten?"
- myLabel ] ; [Fenster addSubview: myLabel];
- / / Create the Texteingabe
- initWithFrame : CGRectMake ( 10, 120, 300, 30 ) ] ; number = [[UITextField alloc] initWithFrame: CGRectMake (10, 120, 300, 30)];
- numero.borderStyle = UITextBorderStyleRoundedRect;
- numero.textAlignment = UITextAlignmentCenter;
- numero.keyboardType = UIKeyboardTypeNumberPad;
- ; numero.placeholder = @ "Enter number";
- numero ] ; [Fenster addSubview: Anzahl];
- / / Create the Button
- 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 ] ; [Button addTarget: self Aktion: @ selector (controllaNumero) forControlEvents: UIControlEventTouchUpInside];
- bottone ] ; [Fenster addSubview: Taste];
- ; [MyLabel release];
- ; [NavigationItem release];
- ; [MyNavigationBar release];
Da die applicationDidFinishLaunching Spiele wie beim letzten Mal viewDidLoad kurz nach der [mainWindow release]; gemacht haben:
- arc4random ( ) % 10 ; numeroACaso = 1 + arc4random ()% 10;
Jetzt können wir tun, ist die Methode umzusetzen controllaNumero die identisch sein (abgesehen von dem Prototyp), die ein letztes Mal verwendet werden:
- ) controllaNumero { - (Void) (controllaNumero
- ) ; NSLog (@ "Push-Button numerischen Steuerung");
- numero.text integerValue ] ; int numeroInserito = [numero.text integerWert];
- , numeroInserito ) ; NSLog (@ "Die eingegebene Zahl% d", numeroInserito);
- numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) (
- ; @ Message = "Zu niedrig ..."
- ( numeroInserito> numeroACaso ) { ) Else if (numeroInserito> numeroACaso) (
- ; @ Message = "Zu hoch ..."
- ( numeroInserito == numeroACaso ) { ) Else if (numeroInserito == numeroACaso) (
- ; message = @ "Bravo, Sie haben es erraten;
- arc4random ( ) % 10 ; numeroACaso = 1 + arc4random ()% 10;
- , numeroACaso ) ; NSLog (@ "Number% d dachte:" numeroACaso);
- )
- UIAlertView alloc ] UIAlertView * alertMessaggio = [[UIAlertView alloc]
- initWithTitle: @ "Response"
- Nachricht: Nachrichten
- Delegierter: Null
- cancelButtonTitle: @ "OK"
- ] ; otherButtonTitles: nil];
- ; [AlertMessaggio zeigen];
- ; [AlertMessaggio release];
- ; numero.text @ = "";
- )
Wir sind fertig!
Schlussfolgerungen und Überlegungen
In diesem Beispiel keine direkten Verwendung eines UIView oder UIViewController nur weil ich wollte es so einfach und einheitlich wie möglich und auch zu verlassen, um zu zeigen, dass es Elemente gibt, noch benötigt werden. Jedoch für Objekte direkt im Fenster haben einen Sinn in diesem Beispiel und in anderen Kontexten sporadisch. Die Verwendung von UIView und UIViewController noch Vorteile bringen in vielen anderen Fällen, undbei einige sind praktisch unverzichtbar, wie wir sehen werden in der Zukunft.














Es gibt keine Kommentare für diesen Beitrag
Leave a comment