Witam Tworzę kontroler pasek kart w Xcode, a nie w konstruktorze interfejsów. tytuły widoków na kartach określają tytuły na kartach, ale nie jestem pewien, jak ustawić obrazy.jak ustawić obraz dla uitabbarcontroller w kakao kod
Czy ktoś może pomóc?
Witam Tworzę kontroler pasek kart w Xcode, a nie w konstruktorze interfejsów. tytuły widoków na kartach określają tytuły na kartach, ale nie jestem pewien, jak ustawić obrazy.jak ustawić obraz dla uitabbarcontroller w kakao kod
Czy ktoś może pomóc?
wyobraziłem go można dostać tablicę widzenia kontrolerów i następnie dodać obrazy:
NSArray *tabs = tabBarController.viewControllers;
UIViewController *tab1 = [tabs objectAtIndex:0];
tab1.tabBarItem.image = [UIImage imageNamed:@"clockicon.png"];
UIViewController *tab2 = [tabs objectAtIndex:1];
tab2.tabBarItem.image = [UIImage imageNamed:@"nearest.png"];
UIViewController ma właściwość tabBarItem, która ma właściwość image (odziedziczoną z podklas klasy UIBarItem klasy UITabBarItem). Na przykład:
viewController.tabBarItem.image = [UIImage imageNamed:@"foo.png"];
UITabBarController
nie pozwala na wiele cech, jak kolorowe obrazy dla przedmiotów pasku kart , czcionki dla elementów paska, a także obraz tła paska zakładek. Znalazłem sposób na obejście. kiedy jeden UITabBarController
został dodany do UITabBarController
(nie delegata aplikacji) przez Xib, istnieje również plik UIView
dla UITabBarController
(z nazwą "widok"). dodaj widoki obrazów ze swoimi obrazami do paska kart, a także elementów paska kart, etykiet i czego chcesz, tak aby znalazły się pod ramką paska kart. teraz musimy uczynić zakładkę nietoperzem niewidoczną, ale wciąż wykonalną. zredukuj wartość alfa paska zakładek o wartości UITabBarController
z XIB tp 0.02 (poniżej 0,01 pasek kart nie przechwytuje akcji dotykowej). gotowe! nawet jeśli robisz to wszystko programowo ... to są bardzo trywialne ... ta podróż dookoła unika polityki jabłek, że programiści nie mogą podklasy UITabBarController
. więc ... Pozdrawiam :)
szybko napisał następujące klasy i pokazywanie/ukrywanie widoków zakładki z UITabBarController pracował jak magia:
TabBarDesigner.h
#import <Foundation/Foundation.h>
@interface TabBarDesigner : NSObject
{
}
+(void) setTabBarController:(UITabBarController *)tabBarController
items:(NSArray *)tabBarItems
viewControllers:(NSArray *)viewControllers;
+(void) removeItemsInRange:(NSRange) range;
@end
TabBarDesigner.m
#import "TabBarDesigner.h"
static NSArray *_tabBarItems = NULL;
static NSArray *_viewControllers = NULL;
static UITabBarController *_tabBarController = NULL;
@implementation TabBarDesigner
+(void) setTabBarController:(UITabBarController *)tabBarController
items:(NSArray *)tabBarItems
viewControllers:(NSArray *)viewControllers
{
if (tabBarItems && viewControllers && tabBarController)
{
if ([tabBarItems count] == [viewControllers count])
{
[_tabBarItems release];
[_viewControllers release];
_tabBarItems = [tabBarItems copy];
_viewControllers = [viewControllers copy];
_tabBarController = tabBarController;
}
}
}
+(void) removeItemsInRange:(NSRange) range
{
if (_tabBarController)
{
if (range.location < ([_tabBarItems count] - 1))
{
if ((range.length + range.location) < [_tabBarItems count])
{
NSMutableArray *tabBarItems = [_tabBarItems mutableCopy];
[tabBarItems removeObjectsInRange:range];
NSMutableArray *viewControllers = [_viewControllers mutableCopy];
[viewControllers removeObjectsInRange:range];
[_tabBarController setViewControllers:viewControllers];
NSUInteger i;
for (i = 0; i< [viewControllers count]; i++)
{
UIViewController *vC = [viewControllers objectAtIndex:i];
vC.tabBarItem.image = [[tabBarItems objectAtIndex:i] image];
vC.tabBarItem.title = [[tabBarItems objectAtIndex:i] title];
vC.tabBarItem.tag = [[tabBarItems objectAtIndex:i] tag];
}
[tabBarItems release];
[viewControllers release];
}
}
}
}
@end
Przykład użycia tej klasy: W urządzeniu MyAppDelegate.m
#import "TabBarDesigner.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[TabBarDesigner setTabBarController:_tabBarController
items:[_tabBarController.tabBar items]
viewControllers:[_tabBarController viewControllers]];
// remove the first 3 tabs
[TabBarDesigner removeItemsInRange:NSMakeRange(0,3)];
// show all tabs
[TabBarDesigner removeItemsInRange:NSMakeRange(0,0)];
// continue with your code
}
Pozdrawiam!
my tabbarcontroller jest tablicą uiviews, skąd mam wiedzieć, który jest który tabbaritem? – Atma
wydaje się, że właściwość .image z UITabBarItem jest nieudokumentowana ... czy jesteś pewien, że powinniśmy użyć tej właściwości? – Johnus