我正在使用TabbarController。当我在第一个选项卡中的所有其他tabItem处于禁用模式时,并且在第一个选项卡的视图控制器中有一个按钮,单击该按钮时,它应该移至第二个选项卡。我已经实现了setselectedindex,但是没有任何改变。

 - (void)clinicBtnTapped
 {
    enteredSecondTab==YES;
    CustomTabBar *tabbar=[[CustomTabBar alloc] init];

    [self.tabBarController setSelectedIndex:1];

    AppSys_SplitView *apptmtSys=[[AppSys_SplitView alloc] init];

    [tabbar tabBarController:tabbar.tabBarController shouldSelectViewController:apptmtSys];
    tabindex=1;
    [tabbar tabBarController:tabbar.tabBarController didSelectViewController:appsys];

}


在应选择ViewController

    - (BOOL)tabBarController:(UITabBarController *)tabBarControlle shouldSelectViewController:(UIViewController *)viewController{

   tabindex = [[tabBarControlle viewControllers] indexOfObject:viewController];
    NSLog(@"index %d",index);

    for(UIImageView *view in[self.view subviews]){

        [view removeFromSuperview];
    }
        tabBarController.imgV.frame=CGRectMake(0, 717, 1024, 53);

    switch (tabindex) {

        case 0:

            enteredFirstTab = YES;
            enteredSecondTab = NO;
            enteredThirdTab = NO;
            enteredFourthTab = NO;
            tabBarController.imgV.image=[UIImage imageNamed:@"select_TrackClinic_icon.png"];


            return YES;
            break;

        case 1:
            if(enteredSecondTab == YES)
            {
                enteredFirstTab = NO;
                enteredSecondTab = YES;
                enteredThirdTab = NO;
                enteredFourthTab = NO;
                tabBarController.imgV.image=[UIImage imageNamed:@"select_Application_icon.png"];
                return YES;
            }
            else
            {
                return YES;
            }



            break;


        case 2:

            return NO;

            enteredFirstTab = NO;
            enteredSecondTab = NO;
            enteredThirdTab = YES;
            enteredFourthTab = NO;
            tabBarController.imgV.image=[UIImage imageNamed:@"select_regularOnsite_icon.png"];

            break;

        case 3:

            return NO;

            enteredFirstTab = NO;
            enteredSecondTab = NO;
            enteredThirdTab = NO;
            enteredFourthTab = YES;
            tabBarController.imgV.image=[UIImage imageNamed:@"select_resultUpdate_icon.png"];
            break;

        default:

            break;

    }

}

最佳答案

在这里,我可以为您提供一些实现自定义标签栏的教程

Delegate.h文件

@interface cTabBarAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet UIImageView *imgV;
@end


Delegate.m文件

@implementation cTabBarAppDelegate

@synthesize window=_window;
@synthesize tabBarController=_tabBarController;
@synthesize imgV = _imgV;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    // Add the tab bar controller's current view as a subview of the window
    self.tabBarController.delegate=self;
    self.imgV.frame=CGRectMake(0, 425, 320, 55);
    [self.tabBarController.view addSubview:self.imgV];
    self.tabBarController.selectedIndex=0;
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
    NSUInteger index=[[tabBarController viewControllers] indexOfObject:viewController];

    switch (index) {
        case 0:
            self.imgV.image=[UIImage imageNamed:@"tBar1.png"];
            break;
        case 1:
            self.imgV.image=[UIImage imageNamed:@"tBar2.png"];
            break;
        case 2:
            self.imgV.image=[UIImage imageNamed:@"tBar3.png"];
            break;
        case 3:
            self.imgV.image=[UIImage imageNamed:@"tBar4.png"];
            break;
        case 4:
            self.imgV.image=[UIImage imageNamed:@"tBar5.png"];
            break;
        default:
            break;
    }

    return YES;
}


将以下代码放入viewcontroller.m中

  AppDelegate   *delegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];

    SearchVctr *viewController1 = [[SearchVctr alloc] initWithNibName:@"SearchVctr" bundle:nil];
    UINavigationController *navForRentResidental= [[UINavigationController alloc]initWithRootViewController:viewController1];

    UIViewController *viewController2 = [[FavouriteVctr_iphone alloc] initWithNibName:@"FavouriteVctr_iphone" bundle:nil];
    UINavigationController *navForFavorite= [[UINavigationController alloc]initWithRootViewController:viewController2];

    UIViewController *viewController3 = [[LoginAndRegisterVctr alloc] initWithNibName:@"LoginAndRegisterVctr" bundle:nil];
    UINavigationController *navForLogin= [[UINavigationController alloc]initWithRootViewController:viewController3];
    navForLogin.navigationBar.hidden=TRUE;

    UIViewController *viewController4 = [[ContactUsVctr alloc] initWithNibName:@"ContactUsVctr" bundle:nil];
    UINavigationController *navForContact= [[UINavigationController alloc]initWithRootViewController:viewController4];

    UIViewController *viewController5 = [[MoreVctr_iphone alloc] initWithNibName:@"MoreVctr_iphone" bundle:nil];
    UINavigationController *navForMore= [[UINavigationController alloc]initWithRootViewController:viewController5];

    navForContact.navigationBar.hidden=TRUE;
    navForMore.navigationBar.hidden=TRUE;
    navForLogin.navigationBar.hidden=TRUE;
    navForFavorite.navigationBar.hidden = TRUE;

    if([sender tag] == 1){
        delegate.tabBarController.viewControllers = [NSArray arrayWithObjects:navForRentResidental, navForFavorite, navForLogin, navForContact, navForMore, nil];
        delegate.tabBarController.selectedIndex = 3;
        delegate.imgV.image=[UIImage imageNamed:[NSString stringWithFormat:@"t4.png"]];
        delegate.tabBarController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:delegate.tabBarController animated:YES];
    }else if([sender tag] == 2){
        UIViewController *viewController5 = [[AboutVctr alloc] initWithNibName:@"AboutVctr" bundle:nil];
        delegate.tabBarController.viewControllers = [NSArray arrayWithObjects:navForRentResidental, navForFavorite, navForLogin, navForContact, viewController5, nil];
        delegate.tabBarController.selectedIndex = 4;
        delegate.imgV.image=[UIImage imageNamed:[NSString stringWithFormat:@"t5.png"]];
        delegate.tabBarController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:delegate.tabBarController animated:YES];
    }
        else if([sender tag] == 3){
        UIViewController *viewController5 = [[ServicesVctr alloc] initWithNibName:@"ServicesVctr" bundle:nil];
        UINavigationController *navcontroller= [[UINavigationController alloc]initWithRootViewController:viewController5];
        navcontroller.navigationBar.hidden=TRUE;
        delegate.tabBarController.viewControllers = [NSArray arrayWithObjects:navForRentResidental, navForFavorite, navForLogin, navForContact, navcontroller, nil];
        delegate.tabBarController.selectedIndex = 4;
    delegate.imgV.image=[UIImage imageNamed:[NSString stringWithFormat:@"t5.png"]];
        delegate.tabBarController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:delegate.tabBarController animated:YES];
    }
    else if([sender tag] == 4){
        delegate.tabBarController.viewControllers = [NSArray arrayWithObjects:navForRentResidental, navForFavorite, navForLogin, navForContact, navForMore, nil];
        delegate.tabBarController.selectedIndex = 2;
        delegate.imgV.image=[UIImage imageNamed:[NSString stringWithFormat:@"t3.png"]];
         delegate.imgV.image=[UIImage imageNamed:[NSString stringWithFormat:@"t3.png"]];
        delegate.tabBarController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:delegate.tabBarController animated:YES];
    }
        else if([sender tag] == 5){
        delegate.tabBarController.viewControllers = [NSArray arrayWithObjects:navForRentResidental, navForFavorite, navForLogin, navForContact, navForMore, nil];
        delegate.tabBarController.selectedIndex = 0;
        delegate.imgV.image=[UIImage imageNamed:[NSString stringWithFormat:@"t1.png"]];
        delegate.imgV.image=[UIImage imageNamed:[NSString stringWithFormat:@"t1.png"]];
                        delegate.tabBarController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:delegate.tabBarController animated:YES];

    }


此代码可能有助于开发。

07-27 19:32