Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: OS X Entwicklerforum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

1

Sonntag, 13. Februar 2011, 11:26

Universal-App - Wie XIBs abspeichern?

Hallo,

ich bin gerade dabei, meine App fürs iPad umzusetzen. Ich möchte aber eine Universal-App und keine extra HD-Version haben.

Bis jetzt habe ich folgendes:

- XIB iPhone
- XIB iPad
- Unter Info -> Targeted Device Family iPhone/iPad eingestellt.

Je nachdem auf welcher Geräte-Familie meine App startet, soll nun entweder die iPhone XIB oder die iPad XIB angezeigt werden. Sprich ich kann NICHT nur eine XIB für beide Geräte-Familien haben.

Wie stelle ich es nun an, dass ich zwei XIBs habe für eine Klasse und, dass auf dem iPhone die eine und auf dem iPad die andere angezeigt wird?

Beiträge: 6 357

Wohnort: Herdecke

Beruf: Selbständig

Hobbys: Gleitschirmfliegen, RC-Helikopter, Faustball

  • Private Nachricht senden

2

Sonntag, 13. Februar 2011, 11:33

Moin,

nur schnell zusammen getippert, rest muste Dir selber dazu bauen :)

Quellcode

1
2
3
4
5
6
NSString *deviceType = [UIDevice currentDevice].model;  

if([deviceType isEqualToString:@"iPad"]) 
     controller=[UIViewController alloc] initWithNibname:@"ViewController_iPad"];
else
   ....


Und für den StartNib gibt es einen Eintrag in der plist.

Gruß

Claus
Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)

Beiträge: 9 859

Wohnort: Klüngelshausen

Beruf: 1,5

Hobbys: Maulaffen feilhalten, Starkstrom

  • Private Nachricht senden

3

Sonntag, 13. Februar 2011, 13:39

Du kann die View-Controller-Objekte auch jeweils in der XIB-Datei des Vorgängers anlegen. Also die MainWindow.xib enthält den ersten View-Controller. Der erzeugt dann den nächsten usw.
„Meine Komplikation hatte eine Komplikation.“

Apps programmieren für iPhone und iPad

Beiträge: 4 320

Wohnort: Ruhrgebiet, NRW

Beruf: Mac Indie / Freelancer

  • Private Nachricht senden

4

Sonntag, 13. Februar 2011, 13:49

Moin,

nur schnell zusammen getippert, rest muste Dir selber dazu bauen :)

Quellcode

1
2
3
4
5
6
NSString *deviceType = [UIDevice currentDevice].model;  

if([deviceType isEqualToString:@"iPad"]) 
     controller=[UIViewController alloc] initWithNibname:@"ViewController_iPad"];
else
   ....

Anstelle der o.a. Abfrage und Auswertung des model Properties sollte man lieber das Property userInterfaceIdiom verwenden, damit die App ohne Änderungen auch auf zukünftigen Devices laufen könnte. ;)

Beiträge: 6 357

Wohnort: Herdecke

Beruf: Selbständig

Hobbys: Gleitschirmfliegen, RC-Helikopter, Faustball

  • Private Nachricht senden

5

Sonntag, 13. Februar 2011, 13:54

Anstelle der o.a. Abfrage und Auswertung des model Properties sollte man lieber das Property userInterfaceIdiom verwenden, damit die App ohne Änderungen auch auf zukünftigen Devices laufen könnte.


Hi Dan,

wahrscheinlich hast Du recht, aber ob ich nun das Idiom auf die beiden bisherigen Möglichkeiten abfrage oder das DeviceModell. Ich werde bei einem neuen Device, welches ein anderes großes Display hat, immer eine neue Version machen müssen, oder das Ergebnis das ich bekomme hängt vom Zufall ab.

Gruß

Claus
Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)

6

Sonntag, 13. Februar 2011, 14:52

Ich habe nun in der MainWindow.xib den View Controller gelöscht und im App Delegate folgendes eingefügt:

Quellcode

1
2
3
4
5
6
7
8
	if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
		viewController = [[AppViewController alloc] initWithNibName:@"AppViewController" bundle:nil];
	} else if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
		viewController = [[AppViewController alloc] initWithNibName:@"AppViewController_iPad" bundle:nil];
	}
	
    [self.window addSubview:viewController.view];
    [self.window makeKeyAndVisible];

Das Ergebnis sieht dann so aus, dass er die Status Bar nicht berücksichtigt und den View somit 20px zu weit oben einsetzt. Unter dem View ist dann ein 20px hoher weißer Rand. Wie kann ich dies nun noch beheben?

Beiträge: 6 357

Wohnort: Herdecke

Beruf: Selbständig

Hobbys: Gleitschirmfliegen, RC-Helikopter, Faustball

  • Private Nachricht senden

7

Sonntag, 13. Februar 2011, 15:15

Beim MAinWindow geht das viel einfacher. SChau einfach mal bei der plist.info Da gibt es zwei Einträge für das StartNib. Einen fürs iPhone und einen fürs iPad.

Gruß

Claus
Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)

8

Sonntag, 13. Februar 2011, 15:23

Wenn ich App Delegate und MainWindow.xib entferne und die Einträge Main nib file base name (iPhone) und Main nib file base name (iPad) ersetze durch AppViewController und AppViewController_iPad stürzt die App direkt nach dem Start mit einer NSUnknownKeyException ab.

Beiträge: 6 357

Wohnort: Herdecke

Beruf: Selbständig

Hobbys: Gleitschirmfliegen, RC-Helikopter, Faustball

  • Private Nachricht senden

9

Sonntag, 13. Februar 2011, 15:25

Dann hast du aber wo anders ein Problem. Überprüf mal die Delegates und die Klasse die Du bei den NIBs eingetragen hast.

Gruß

Claus
Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)

10

Sonntag, 13. Februar 2011, 15:27

Bei den XIBs habe ich als Klasse AppViewController eingetragen (bei beiden). Das sind normale UIViewController..

11

Sonntag, 13. Februar 2011, 18:13

Ich darf es im App Delegate nicht als Subview hinzufügen, sondern als rootViewController:
[self.window setRootViewController:viewController];

Social Bookmarks