0

カスタムUITabBarItemについて問題があります

まず、私のコードデモをダウンロードできます

今、私はMyAppDelegateのカスタムUITabbarcontrollerです:

-(void)configureiPhoneTabBar
{
    tabViewController  = (UITabBarController *)self.window.rootViewController;
    UIViewController *controller1 = [[tabViewController viewControllers] objectAtIndex:0];
    [self configureTabBarItemWithImageName:@"home_ON.png" : @"home.png" andText:@"Home" forViewController:controller1];

    UIViewController *controller2 = [[tabViewController viewControllers] objectAtIndex:1];
    [self configureTabBarItemWithImageName:@"tvChannel_ON.png" : @"tvChannel.png" andText:@"TV" forViewController:controller2];
}

-(void)configureTabBarItemWithImageName:(NSString*)imageName1 : (NSString*)imageName2 andText:(NSString *)itemText forViewController:(UIViewController *)viewController
{
    UIImage* icon1 = [UIImage imageNamed:imageName1];
    UIImage* icon2 = [UIImage imageNamed:imageName2];

    UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:itemText image:icon1 tag:0];
    [item1 setTitleTextAttributes:@{ UITextAttributeTextColor : [UIColor whiteColor] }
                         forState:UIControlStateNormal];
    [item1 setFinishedSelectedImage:icon1 withFinishedUnselectedImage:icon2];
    [viewController setTabBarItem:item1];
}

UINavigationController内でUITabbarcontrollerを使用していますが、コードを実行してUITabBarControllerで「initial」をチェックすると、インターフェイスがtrueと表示されますが、UINavigationControllerで「initial」をチェックすると、appdelegateからuitabaritemをカスタマイズできません。

4

2 に答える 2

0

ログイン ビュー コントローラーからアプリを起動する場合、その最初のビュー コントローラーから tabBarController を構成できます。でこれを行うことができます。prepareForSegueそこには、tabBarController へのポインターがあるためsegue.destinationViewControllerです

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        [self configureiPhoneTabBar:segue.destinationViewController];
    }

tabBarViewController 構成コードをこの viewController に移動します...

 -(void)configureiPhoneTabBar:(UITabBarController*)tabViewController
 {
        // tabViewController  = (UITabBarController *)self.window.rootViewController;
    UIViewController *controller1 = [[tabViewController viewControllers] objectAtIndex:0];
        //...etc...

またはconfigureiPhoneTabBar:、構成を行うためにアプリのデリゲートに送信します (ただし、実際には、コードをアプリのデリゲートから遠ざけることが最善です)。

さらに良いのは、UITabBarViewController をサブクラス化し、構成コードをそこに配置して、viewDidLoad によってトリガーすることです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self configureiPhoneTabBar];
}


-(void)configureiPhoneTabBar
  {
    UIViewController *controller1 = [[self viewControllers] objectAtIndex:0];

        ...etc...

別のオプションとして、タブ バーに読み込まれるそれぞれの viewControllers で構成コードを見つけることができます。

于 2013-01-25T05:35:18.377 に答える
0

タブ バーをカスタマイズするコードを LoginViewController (タブ バー コントローラーに続くもの) に移動します。このコードをそのファイルの最後に追加しました。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"idenLogin"]) {
        UITabBarController *tabViewController  = segue.destinationViewController;
        UIViewController *controller1 = [[tabViewController viewControllers] objectAtIndex:0];
        [self configureTabBarItemWithImageName:@"home_ON.png" : @"home.png" andText:@"Home" forViewController:controller1];
        UIViewController *controller2 = [[tabViewController viewControllers] objectAtIndex:1];
        [self configureTabBarItemWithImageName:@"tvChannel_ON.png" : @"tvChannel.png" andText:@"TV" forViewController:controller2];
    }
}


-(void)configureTabBarItemWithImageName:(NSString*)imageName1 : (NSString*)imageName2 andText:(NSString *)itemText forViewController:(UIViewController *)viewController {
    UIImage* icon1 = [UIImage imageNamed:imageName1];
    UIImage* icon2 = [UIImage imageNamed:imageName2];

    UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:itemText image:icon1 tag:0];
    [item1 setTitleTextAttributes:@{ UITextAttributeTextColor : [UIColor whiteColor] }
                         forState:UIControlStateNormal];
    [item1 setFinishedSelectedImage:icon1 withFinishedUnselectedImage:icon2];
    [viewController setTabBarItem:item1];
}
于 2013-01-25T07:24:36.030 に答える