Cen*_*ion 46 cocoa-touch objective-c storyboard uikit ios
我在storyboad中有三个控制器(FirstVC,SecondVC,ThirdVC),导航是顺序的:用户可以从FirstVC导航到SecondVC,然后导航到ThirdVC.现在,我需要制作一些按钮,它将从FirstVC打开ThirdVC,但也会将SecondVC放在导航堆栈上,所以当用户从ThirdVC按回来时,他将返回到SecondVC.因此,我不需要从FirstVC到SecondVC的动画,只需要在导航控制器堆栈上推送SecondVC,然后仅动画转换到ThirdVC.
我无法找到如何禁用performSegueWithIdentifier的动画,所以我想我应该手动从storyboard实例化SecondVC,将它放在导航堆栈上,然后为ThirdVC执行performSegueWithIdentifier.任何想法如何做到这一点?
Kim*_*afr 79
如果您在第一个VC中,您正在寻找的解决方案:
NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy];
[controllers addObject:secondVc];
[controllers addObject:thirdVC];
[self.navigationController setViewControllers:controllers animated:YES];
Run Code Online (Sandbox Code Playgroud)
这将在第三个VC中生成动画,而第二个VC在此过程中不会变得可见.当用户按下后退按钮时,它们将返回到第二个VC
Dav*_*ith 26
要在Swift中保留用于推送视图控制器的标准动画:
let pushVC = UIViewController()
let backVC = UIViewController()
if let navigationController = navigationController {
navigationController.pushViewController(pushVC, animated: true)
let stackCount = navigationController.viewControllers.count
let addIndex = stackCount - 1
navigationController.viewControllers.insert(backVC, atIndex: addIndex)
}
Run Code Online (Sandbox Code Playgroud)
这会pushVC正常显示并插入backVC到导航堆栈中,同时保留动画和历史记录UINavigationController.
你可以使用setViewControllers,但你将失去标准的推动画.
来自KimAMartinsen解决方案的Swift版本
let firstVC = self.storyboard?.instantiateViewController(withIdentifier: "Tests") as! firstViewController
let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "Dashboard") as! SecondViewController
var controllers = self.navigationController?.viewControllers
controllers?.append(firstVC)
controllers?.append(secondVC)
self.navigationController?.setViewControllers(controllers!, animated: true)
Run Code Online (Sandbox Code Playgroud)
小智 5
extension UINavigationController {
open func pushViewControllers(_ inViewControllers: [UIViewController], animated: Bool) {
var stack = self.viewControllers
stack.append(contentsOf: inViewControllers)
self.setViewControllers(stack, animated: animated)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13048 次 |
| 最近记录: |