如何从 UITabBarController 页面导航到具有 PUSH 样式的另一个视图控制器
Posted
技术标签:
【中文标题】如何从 UITabBarController 页面导航到具有 PUSH 样式的另一个视图控制器【英文标题】:How to navigate to another viewcontroller with PUSH style from UITabBarController page 【发布时间】:2015-05-20 09:13:08 【问题描述】:首先,我是初学者。原谅我这个愚蠢的问题。
我使用UITabBarController
创建了两个子页面,第一页包括UIButton
,并且我还创建了另一个页面(DetailPage)。我用segue连接了按钮和DetailPage
。但是segue的样式不能设置为push
。(这会引发错误,push
样式只用于UINavigatorController
)。
那么,当我单击按钮时,如何以 PUSH 样式导航到 DetailPage?
我尝试了一种新方法,使用UINavigatorController
管理首页和DetailPage,然后将thisUINavigatorController
嵌入到UITabItem
中。完成此操作后,我可以使用 push
样式导航到 DetailPage。但是出现了另一个问题,在导航 DetailPage 时,TabBar 始终停留在页面底部。我想把所有UITabBarController
推到左边。
我想要的效果如下图:
如何优化我的代码?
【问题讨论】:
您的设置似乎很好.. 有条件地隐藏底部选项卡栏只需在详细页面视图控制器的视图中设置self.hidesBottomBarWhenPushed = true;
并将其设置为false
在视图中将出现方法第一个视图控制器...
不错的解决方案,我明白了。非常感谢。
【参考方案1】:
像这样实现委托(UITabBarControllerDelegate)方法:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
NSArray *tabViewControllers = tabBarController.viewControllers;
UIView * fromView = tabBarController.selectedViewController.view;
UIView * toView = viewController.view;
if (fromView == toView)
return false;
NSUInteger fromIndex = [tabViewControllers indexOfObject:tabBarController.selectedViewController];
NSUInteger toIndex = [tabViewControllers indexOfObject:viewController];
[UIView transitionFromView:fromView
toView:toView
duration:0.3
options: toIndex > fromIndex ? UIViewAnimationOptionTransitionFlipFromLeft : UIViewAnimationOptionTransitionFlipFromRight
completion:^(BOOL finished)
if (finished)
tabBarController.selectedIndex = toIndex;
];
return true;
这是用于翻转动画只需更改动画
对于推送:
CATransition* transition = [CATransition animation];
[transition setDuration:0.3];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromLeft;
[transition setFillMode:kCAFillModeBoth];
[transition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[view.layer addAnimation:transition forKey:kCATransition];
流行音乐:
CATransition* transition = [CATransition animation];
[transition setDuration:0.3];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;
[transition setFillMode:kCAFillModeBoth];
[transition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[view.layer addAnimation:transition forKey:kCATransition];
现在由你决定,祝你好运......
【讨论】:
也许您的解决方案用于在 tabBarController 中从一个视图控制器导航到另一个视图控制器。我用self.hidesBottomBarWhenPushed = true
得到它。还是谢谢大家。
对不起!!我误解了。 :(根据我的理解,你想用推弹动画改变标签。顺便恭喜!!!以上是关于如何从 UITabBarController 页面导航到具有 PUSH 样式的另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何从 View 获取数据到 UITabBarController
如何从自己的子视图控制器中关闭模态 uitabbarcontroller
如何使用 Swift 从 UITabBarController 的子类触发动作
如何从它的项目 ViewControllers 访问 UITabBarController 的变量
如何从应用程序委托访问 uitabbarcontroller 内的 uinavigationcontroller 内的 uitableview?