| 

.NET C# Java Javascript Exception

3
Hallo zusammen,

ich habe mal wieder eine Frage zur iOS-Entwicklung: Ich arbeite an einer Universal-App für iPhone und iPad. Der Startscreen ist ein UINavigationController, auf dem sich mehrere UIButton-Elemente befinden. Ich nutze folgenden Code in einer IBAction-Methode, um per Klick auf einen der UIButtons eine neue View aufzurufen (die Verknüpfung zwischen UIButton und IBAction-Methode ist über den Interface Builder festgelegt):

TextViewController *textViewController = [[TextViewController alloc] initWithNibName:@"TextViewController" bundle:nil];
[self.navigationController pushViewController:textViewController animated:YES];
[textViewController release];


Auf dem iPhone funktioniert das einwandfrei und die View (TextViewController) wird aufgerufen. Auf dem iPad allerdings geschieht nach Klick auf den UIButton rein gar nichts. Woran könnte das liegen?

Zur Erläuterung noch: Für die Darstellung des Startscreens nutze ich für iPhone und iPad je eine eigene XIB-Datei. Bei beiden ist aber die zugehörige Klasse eingebunden und auch die UIButtons sind bei beiden XIB-Files mit den IBAction-Methoden verknüpft.

Falls ich noch nähere Informationen liefern soll gebt mir einfach Bescheid! Besten Dank bereits im Voraus für jede Unterstützung!

Viele Grüße,
Thomas
01.11.2011
Sillivan 479 1 7
1
Setze mal einen Breakpoint in deinen Code. Ist self.navigationController nil wenn du pushViewController: aufrufst?
puls200 02.11.2011
Hab ich gemacht und mir das Ergebnis in Xcode mal angesehen, folgendes ist dabei aufgefallen: Teste ich den Code im iPhone-Simulator, wird mir am Breakpoint "self -> UIViewController -> _parentViewController = (UINavigationController *)" angezeigt, im iPad-Simulator hingegen "self -> UIViewController -> _parentViewController = (UITabBarController *)"; da passt also offensichtlich etwas nicht, aber leider ist mir damit noch nicht ganz klar, wo ich ansetzen muss.
Sillivan 02.11.2011
2
Das ist dann der Grund warum der push nicht klappt. Das funktioniert nur vom Navcontroller aus. Wahrscheinlich stimmt etwas in deinem .xib nicht.
puls200 02.11.2011
Danke für den Hinweis, ich werde mir das die Woche noch einmal genauer ansehen und hier entsprechend posten, wenn ich noch etwas herausgefunden habe! Vielen Dank für deinen Tipp!
Sillivan 03.11.2011
2 Antworten
2
Hatte mal genau dasselbe Problem.

Gib dem xib fürs iPhone oder dem fürs iPad den Zusatz: -iphone oder -ipad im Dateinamen am Ende.

Dann machst im Source code folgende Unterscheidung:
TextViewController *textViewController
if (UIUserInterfaceIdiomPad) {
textViewController = [[TextViewController alloc] initWithNibName:@"TextViewController" bundle:nil];
}
else
{
textViewController = [[TextViewController alloc] initWithNibName:@"TextViewController-iphone" bundle:nil];
}
.

So hats bei mir dann je nach Gerät das richtige Xib geladen.

*********Edit***********
Hatte ich noch vergessen hinzuzufügen:
Bei meinem Projekt musste ich das ganze natürlich für alle Xibs machen. Also auch für das mainwindow.xib.

Viel Erfolg.
Maverick
03.11.2011
Maverick1st 332 1 7
1
Guten Morgen zusammen,

wie von puls200 richtig vermutet lag das Problem schlicht an meinem XIB-File, nämlich der MainWindow-iPad.xib. Das TabBar-Icon für den Startscreen habe ich dort nämlich nicht als UINavigationController angelegt, entsprechend funktionierte auch der Aufruf über pushViewController nicht; darum besten Dank für den entschiedenen Tipp!

Den Aufruf der XIB-Files handhabe ich nun genau so, wie es auch von Maverick beschrieben wurde. Besten Dank für euren Support, jetzt funktioniert alles genau so wie es soll! :-)

Viele Grüße,
Thomas
04.11.2011
Sillivan 479 1 7

Stelle deine Ios-Frage jetzt!