Ich will auch mal Fensterln!

cropfaktor

cropfaktor

Aktives Mitglied
Thread Starter
Dabei seit
18.01.2008
Beiträge
1.148
Reaktionspunkte
119
Versuche gerade verzweifelt einem Buchbeispiel zu folgen und bekomme die einfachste Fenstergeschichte nicht hin, weil für mich Xcode einen Fehler macht, den ich nicht verstehe.

Im Interfacebuilder ziehe ich mir ein neues View (UIWindow) in die seitliche Leiste und haben nun im Hauptbereich 2 Views.
Auf diesem neuen View ziehe ich mir ein UILabel. Fertig, mehr möchte ich jetzt nicht.

In das Hauptfenster einen UIButton. Mehr da auch nicht.

Im Headerfile FenstertestAppDelegate.h füge ich nun folgenden Code ein:
UIWindow *window;
IBOutlet UIView *infoView;

Und eine einfache Action:
- (IBAction) showInfo;

Die Action programmiere ich erst einmal "leer" in die zugehörige Codedatei:
- (IBAction) showInfo
{
NSLog(@"Gedrückt!");
}
Weiteren Code zum Fensteröffnen erst einmal nicht, weil das eh nicht klappt.

So, im Interfacebuilder ziehe ich nun von "App Delegate" die Outletverbindung auf den Button des ersten Fensters.

Und jetzt die Action?
Ich habe sowohl in App Delegate ein Outlet "infoView" als auch in First Responder????

Und wenn ich nun eine Verbindung von App Delegate aufs Infofenster ziehe dann startet dies in der Simulation als erstes Fenster. Warum zur Hölle denn dass. Im Buchbeispiel passiert dass nicht, da sieht man gedruckt das erste Fenster.

Sorry, dass ist Mischmasch und nicht nachzuvollziehen.

Gibt es da auch eine Logik und wenn ja, wie erfährt man die.
Ach ja Lesen. Wo?

Danke für Hilfe
Andreas
 
Also, ohne das Buch und das Beispiel zu kennen, ist das ein bisschen ins Blaue geraten, aber was mir auffällt: In einer iOS-App mehr als ein UIWindow zu verwenden, ist zumindest ungewöhnlich, normalerweise nimmt man da eher UIViews, die über einen ViewController ein- und ausgeblendet werden (z.B. TabBarViewController u.ä.), aber vielleicht kommt das in Deinem Buch erst später.

Angeordnet und angezeigt werden die Views erst mal in der Reihenfolge, in der sie angelegt werden - und in der Seitenleiste kann man sie dann verschieben und anordnen. Wenn ein View anfangs nicht angezeigt werden soll, dann kann man im IB oder in viewDidLoad: z.B. setHidden:YES setzen.

Die IBActions definiert man im dazugehörigen View Controller, der in Deinem Fall wohl mit dem Application Delegate identisch ist; im IB ist der Platzhalter dafür der "File's Owner".

Lesestoff gibt's bei Apple genug, aber wahrscheinlich hast Du Dir die Doku eh schon angeschaut: View Programming Guide for iOS
 
  • Gefällt mir
Reaktionen: cropfaktor
Hi,

jo, Danke Dir. Da hangel ich mich mal weiter durch.
Mir fehlt die unter 3.2 automatisch generierte UIWindow-Instanz und wenn ich die deklariere:
UIWindow *window;
geht [window addSubview:meinFenster];
trotz allem nicht auf.

Jedes Beispiel bezieht sich aufs alte SDK und in einer View Based Application ist in der Tat die UIWindow-Instanz automatisch angelegt.
Nur mache ich es, passiert halt nichts.

Der View Programming Guide for IOS ist Pflichtlektüre, die für einen Newbie aber nicht wirklich zielführend ist.

Ich tüftel dann man weiter und logisch finde ich es schon lange nicht mehr.

Andreas
 
Vergiss mal den FirstResponder bei iOS. Das etwas, das nur bei OS X zum tragen kommt

Alex
 
Schade,
der Author weiß auch keinen Rat und jetzt wühl ich mich mal zurück und suche mein altes SDK 3.2

Was für ein Aufwand um ein besch... Fenster.

Verstehe nicht, warum ich nicht auf die UIWindow-Instanz "window" zugreifen kann.
Bei mir meldet Xcode: Use of undeclared identifier 'window'.
Wieso geht das unter 3.2 und unter 4 nicht?

Der FirstResponder ist aber prima geeignet, die nervige Tastatur mit dem entsprechenden Code wieder auszublenden.

Ich will nach wie vor "window" ansprechen... und Feuerwehrmann werden :)

Andreas
 
Und wenn nichts hilft, dann hilf Dir selbst:

Code:
    [self.window addSubview:infoFenster];

Ohne Fehlermeldung und in Ordnung.

Hoffe nur, dass dies dann auch der richtige Weg ist, da alle wegen:
Code:
@property (nonatomic, retain) IBOutlet UIWindow *window;
meinen, einfach so auf "window" zugreifen zu können.

Ich kann es nur via "self.window" und dass muss mir erst einmal reichen.

Andreas
 
Zurück
Oben Unten