如何根据应用程序中的某些情况以编程方式更改UITabBarItems的位置

时间:2015-09-23 10:00:46

标签: ios objective-c uitabbar

我的UITabBar中有3个项目,我的应用程序运行2种语言(英语和阿拉伯语)。我需要在应用程序切换到阿拉伯语时更改项目的位置,因为需要从右到左阅读TabBar Items

即。标签名为" One Way"必须出现在右侧,Multi City必须出现在左侧。有没有办法做到这一点?

我尝试过这种方法,但不允许这样做

 UITabBarItem *realItemOne=[self.tabBar.items objectAtIndex:0];
    UITabBarItem *realItemTwo=[self.tabBar.items objectAtIndex:1];
    UITabBarItem *realItemThree=[self.tabBar.items objectAtIndex:2];

    if (_isEnglish) {
        self.tabBar.items=[[NSArray alloc] initWithObjects:realItemOne,realItemTwo,realItemThree, nil];
    }
    else{
        self.tabBar.items=[[NSArray alloc] initWithObjects:realItemThree,realItemTwo,realItemOne, nil];
    }

也试过这个

self.tabBar.items=[[self.tabBar.items reverseObjectEnumerator] allObjects];

我试过的另一种方法

UIViewController *viewControllerOne=[self.tabBarController.viewControllers objectAtIndex:0];
    UIViewController *viewControllerTwo=[self.tabBarController.viewControllers objectAtIndex:1];
    UIViewController *viewControllerThree=[self.tabBarController.viewControllers objectAtIndex:2];
    if (_isEnglish) {
        NSArray *englishOrder=[[NSArray alloc] initWithObjects:viewControllerOne,viewControllerTwo,viewControllerThree, nil];
        [self.tabBarController setViewControllers:englishOrder];
    }
    else{
        NSArray *arabicOrder=[[NSArray alloc] initWithObjects:viewControllerThree,viewControllerTwo,viewControllerOne, nil];
        [self.tabBarController setViewControllers:arabicOrder];
    }

3 个答案:

答案 0 :(得分:1)

不要更改项目,只更改标签项目的文本和图像。

$scope

当用户点击该项目时,您检查语言,然后执行适当的方法。如果用户点击0.元素并且语言是英语,则调用oneWay方法,如果语言是阿拉伯语,则调用multiCity

我希望这会有所帮助。

答案 1 :(得分:1)

您可以使用NSArray格式获取tabBarController中的控制器数量,如下所示:

NSArray *vcArray = self.tabBarController.viewControllers;

现在改变这个" vcArray"的对象的顺序。如你所愿(为了演示目的,我使用了3个控制器。你可以根据需要设置你的逻辑),然后重新分配" vcArray"你的tabBarController如下:

self.tabbarController.viewControllers = vcArray;

实际代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    FirstViewController *fvc = [[FirstViewController alloc] init];
    SecondViewController *svc = [[SecondViewController alloc] init];
    ThirdViewController *tvc = [[ThirdViewController alloc] init];

    fvc.tabBarItem.title = @"First";
    svc.tabBarItem.title = @"Second";
    tvc.tabBarItem.title = @"Third";

    _tbc = [[UITabBarController alloc] init];
    _tbc.viewControllers = [NSArray arrayWithObjects:fvc, svc, tvc, nil];

    self.window.rootViewController = _tbc;
    [self.window makeKeyAndVisible];

    return YES;
}

---------------在AppDelegate的tabViewController中交换控制器的方法-----------

NSArray *arr = self.tbc.viewControllers; //here self means appDelegate

self.tbc.viewControllers = [NSArray arrayWithObjects:arr[2], arr[1], arr[0], nil];

希望这有帮助!

附图供您参考。

enter image description here enter image description here

答案 2 :(得分:0)

enter image description here enter image description here enter image description here这对我有用:

将此代码放在TabBArController ViewWillAppear方法

 NSArray *actualItems= self.viewControllers;

    NSArray* reversedArray = [[actualItems reverseObjectEnumerator] allObjects];


    [self setViewControllers:reversedArray animated:YES];