我有一个自定义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]];
答案 0 :(得分:0)
尝试以编程方式选择UITabBar
项目:
[tabBarItem sendActionsForControlEvents: UIControlEventTouchUpInside];