UITabBarControllerDelegate没有调用

时间:2015-09-16 11:54:50

标签: ios objective-c uitabbarcontroller uitabbar uiswipegesturerecognizer

我有一个自定义UITabBarController类,实现了<UITabBarControllerDelegate>

-tabBarController:shouldSelectViewController:方法中我做了一些自定义动画。 (滑入/滑出)

当按下TabBarItem时,会调用Delegate,一切正常。

现在问题:我在View上也有一个UISwipeGestureRecognizer来在ViewControllers之间滑动。当我从selectedIndex设置TabBarController时,没有出现动画(但视图控制器发生了变化),并且未调用Delegate方法。

我的代码要从滑动中更改:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    UISwipeGestureRecognizer *tmp = (UISwipeGestureRecognizer *) gestureRecognizer;
    int newIx = (int)myTabBarController.selectedIndex;
    if (tmp.direction == UISwipeGestureRecognizerDirectionLeft) {
        newIx ++;
    } else if (tmp.direction == UISwipeGestureRecognizerDirectionRight) {
        newIx --;
    }
    if (newIx >= 0 && newIx < myTabBarController.viewControllers.count) {
        myTabBarController.selectedIndex = newIx; //Set the new Index
    }

    return true;
}

我尝试手动调用-tabBarController:shouldSelectViewController:,但动画无法按预期工作。

委托在故事板中设置。

编辑:由于@ atrebbi的答案,我有更新。

我尝试以编程方式调用&#39;按下项目&#39;。

首先尝试:

UIBarButtonItem *newItem = (UIBarButtonItem*)[myTabBarController.tabBar.items objectAtIndex:newIx];
    SEL press = newItem.action;
    id foo = newItem.target;
    [foo performSelector:press];

第二次尝试:

[[UIApplication sharedApplication] sendAction:newItem.action to:newItem.target from:self forEvent:UIEventTypeTouches];

但两次尝试都在崩溃App。

第二次编辑:我注意到,当我以编程方式调用Delegate方法时,动画只会在第一个swipe处中断。如果我在视图之间再次滑动,则动画可以正常工作。

[self tabBarController:myTabBarController shouldSelectViewController:[myTabBarController.childViewControllers objectAtIndex:newIx]];

1 个答案:

答案 0 :(得分:0)

尝试以编程方式选择UITabBar项目:

[tabBarItem sendActionsForControlEvents: UIControlEventTouchUpInside];