2009-08-23 14 views
0

Ich habe den folgenden Code, der wahr auswertet und den Code innerhalb der geschweiften Klammern ausführt, die ich in OS 2.2.1 nach rechts (oder links) rotiere. Die gleiche Codezeile wird jedoch nicht als wahr ausgewertet (oder in geschweifte Klammern), wenn kompiliert und für OS 3.0 ausgeführt wird ...iPhone-Schnittstelle Ausrichtung Anweisung funktioniert nicht in OS 3.0?

Ich sage dies, weil im Debugger (und dem Protokoll) die Zeilen innerhalb der Klammern erhalten Dies ist innerhalb eines textViewDidBeginEditing Methode auf einem Textview für 3,0

übersprungen, wenn ich zusammengestellt habe ...

etwas änderte sich zwischen 2.x und 3.0 in Bezug auf, wie das gehandhabt wird? Das nicht skalierende Textfeld wurde von Benutzern als ein Fehler erkannt, den ich beheben möchte ...

Dies ist nicht mein Code ursprünglich und wie ich es anschaue, fange ich an zu denken, dass ich sein sollte Implementieren einiger Delegatmethoden für die Rotation ...? Aber es immer noch nervt mich, dass diese Aussage nicht funktioniert ...

Vielen Dank im Voraus für jede Beratung ...

if((self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft)||(self.interfaceOrientation == UIInterfaceOrientationLandscapeRight)) 
{ 
    [self setTextViewHeight:107]; 
    NSLog(@"inside if self.interfaceorientation..."); 

} 

Antwort

0

eine Log-Anweisung vor der textviewheight Zuordnung versuchen, wenn Sie, wenn dies testen wollen Block wird eingegeben (& nicht, wenn es früh durch Fehler in der Zuweisung beendet wird)

+0

Danke - ja, das habe ich ... überall geloggt. Ich setzte auch einen Haltepunkt an der Spitze der Methode und schritt durch den Code und beobachtete, ob der Block in 3.0 übersprungen und in 2.x ausgeführt wurde ... Ich nahm nur die meisten von ihnen aus Gründen der Lesbarkeit ... –

1

Ich weiß nicht warum, aber diese Ansicht Controller weiß nicht, es ist eine eigene interfaceOrientation. Ich nehme an, es hat damit zu tun, dass es sich um einen "UITabBarController" handelt ... Und die "neue Art", dies zu handhaben, die Apple mit 3.0 geändert hat.

Klärende Kommentare zu dieser "Änderung" sind willkommen!

Unterm Strich wurde self.interfaceOrientation immer die Bewertung bis 1 („Up“), egal wie das Gerät gedreht wurde ...

Ich löste dies durch den Verweis zu ändern und mit MyTabBarController.interfaceOrientation statt, da dem TabBarController "superclass" schien zuverlässig zu "wissen", was die Ausrichtung des Geräts war.

(Natürlich musste ich MyTabBarController eine Referenz dieser Klasse geben, gemacht, wenn MyTabBarController lädt alle UIViewControllers in sich selbst ...) Diese bereits im Code existierte ...

dass Referenz In Anbetracht der folgende einfache Änderung gab mir den Zugang zu den „wahren“ Zustand der Rotation ... und dieser Code lief, als erwartet ...

if ((myTabBarController.interfaceOrientation == UIDeviceOrientationLandscapeLeft) || (myTabBarController.interfaceOrientation == UIDeviceOrientationLandscapeRight)) { 
    [self setTextViewHeight:116]; 
+0

An Erklärung für dieses Verhalten aus der Sicht Controller-Programmieranleitung: "In einer iPhone-Anwendung führt das Fensterobjekt einen Großteil der Arbeit zum Ändern der aktuellen Ausrichtung aus ... Insbesondere arbeitet es mit dem View-Controller, dessen Wurzelsicht zuletzt war hinzugefügt oder in dem Fenster dargestellt.Mit anderen Worten, das Fensterobjekt funktioniert nur mit dem vordersten View-Controller, dessen Ansicht mit einem der unter "Darstellen einer View-Controller-Ansicht" beschriebenen Mechanismen angezeigt wurde. – jemmons

+0

@jemmons Warum ist das ein Kommentar und keine Antwort? Es ist die richtigste Antwort auf dieser Seite. – bentford

Verwandte Themen