Ich versuche, das Hintergrundbild für eine Registerkarte in meiner App programmgesteuert festzulegen. Mein Code ist wie folgt:
RootViewController.h
%Vor%RootViewController.m
%Vor%Das funktioniert nicht für mich.
AKTUALISIEREN
UPDATE 23. Januar 2012
Ok, ich habe ein bisschen Fortschritte gemacht. Dies funktioniert erst, seit ich auf Xcode 4.2 und IOS5 aktualisiert habe. Ich habe es mit den Optionen im Interface Builder zurückbekommen, aber jetzt funktioniert es nur noch für IOS5. Idealerweise hätte ich gerne programmatisch gearbeitet, aber ich werde mich vorerst für die IB Lösung entscheiden.
Ich kann es einfach nicht für frühere Releases funktionieren lassen.
HINWEIS: Meine TabBar befindet sich nur auf meinem RootViewController, dem Hauptbildschirm meiner App.
Wenn ich den Code, den Nithin vorgeschlagen hat, im Idealfall hätte, wäre das großartig:
%Vor%Jede Hilfe wäre willkommen.
Grüße, Stephen
Sie können eine benutzerdefinierte Klasse für UITabBarController & amp; überschreiben Sie Ihre tabBarController. Dort können Sie Ihre gewünschten Tasten & amp; ihre Aktionen mit Bild.
So kann Ihre benutzerdefinierte Tab-Controller-Klasse aussehen:
// CustomTabBarController.h
%Vor%// CustomTabBarController.m
%Vor%Hoffe, das wird dir sehr helfen.
Sie müssen dies bedingt durch die Betriebssystemversion codieren.
Wenn Sie nur iOS 5 unterstützen, können Sie einfach die Eigenschaft backgroundImage
der Registerkarte verwenden. Wenn Sie iOS-Versionen unter 5 unterstützen müssen, sollten Sie einen bedingten Code hinzufügen, der ihn "hackt". Es gibt mehrere Ansätze, um das zu tun, hier ist eines:
Wie bereits auf iOS 5 erwähnt, würde ich vorschlagen, dass Sie das Hintergrundbild verwenden:
%Vor% Verwenden Sie immer einen Check wie respondsToSelector
anstelle der expliziten Versionsprüfung. Dies führt zu einem sicheren und zukunftssicheren Code.
Unter iOS 4 würde ich vorschlagen, dass Sie die Methode -[UITabBar drawRect:]
verwenden, vorzugsweise in einer Unterklasse. Setzen Sie dann in Interface Builder die benutzerdefinierte Klasse UITabBarController
s UITabBar
(normalerweise in MainWindow.xib) auf Ihre benutzerdefinierte Unterklasse.
Wenn Sie jedoch keine MainWindow.xib verwenden und wie die Codevorlagen für iOS 5 Ihre UITabBarController
im Code generieren, können Sie die Methode drawRect:
nur mit einer Kategorie in UITabBar
überschreiben.
Dies funktioniert nur auf Systemen iOS 4.x und früher, aber das ist in Ordnung, weil wir bereits iOS 5 behandelt haben.
Sie müssen nur jeden Fall identifizieren und die Version mit -respondToSelector
überprüfen, wie Vinodh sagte. Ich empfehle Ihnen, eine Kategorie auf UITabBar zu erstellen und es einfach zu machen. Also wird der Code diese Form haben:
Und die .m-Datei:
%Vor% Das -drawLayer:inContext
zeichnet das Hintergrundbild schnell.
Wie ich oben geantwortet habe, ist es ohne Hinzufügen von UIView möglich, das Hintergrundbild zu einer UITabBar hinzuzufügen, ein Bild, das verschwinden könnte, wenn Sie [tabBar setNeedsDisplay]
aufrufen, also dachte ich mir, das Bild in -drawLayer:layer inContext:ctx
( -drawInRect:rect
) zu zeichnen. wird nicht genannt). Wenn Sie jedoch vermeiden können, [tabBar setNeedsDisplay]
aufzurufen, gibt es eine einfache Möglichkeit:
Nehmen Sie eine benutzerdefinierte Ansicht und fügen Sie sie in der UITaB-Leiste hinzu. Fügen Sie nun die Schaltfläche in dieser Ansicht hinzu und stellen Sie eine Methodenverknüpfung mit den Tab-Bar-Schaltflächen bereit. Jetzt können Sie alles tun, indem Sie Bilder oder andere Dinge hinzufügen. Es funktioniert wie benutzerdefinierte Tab-Leiste.
Ich habe in der Vergangenheit meinen eigenen TabbarController erstellt, um verschiedene UIViewControllers
zu laden. Mit diesem Controller kann ich das Aussehen der Tabbar- und Tabbar-Elemente manipulieren.
Das funktioniert bei mir gut, aber es ist zunächst ein bisschen Arbeit. Weil Sie UITabBarController
"simulieren" müssen, da Sie nicht die 'native' UITabBar