Jos*_*osh 37 uinavigationcontroller popviewcontroller pushviewcontroller ios
可以从导航堆栈中弹出一个视图,然后再将其直接推到它上面吗?
我正在尝试为这一部分实现一个平面层次结构,并希望有一个分段控制器,但我不能让分段控制器看起来像我想要的任何东西,因此我为什么要尝试使用导航控制器.
单击按钮时,我执行了以下代码:
[[self navigationController] popViewControllerAnimated:YES];
MapsViewController *aViewController = [[MapsViewController alloc]
initWithNibName:@"MapsViewController" bundle:nil];
[self.navigationController pushViewController:aViewController animated:NO];
[aViewController release];
Run Code Online (Sandbox Code Playgroud)
它突然出现,但没有任何推动的迹象!任何帮助,将不胜感激.
Vij*_*com 41
MapsViewController *aViewController = [[MapsViewController alloc]
initWithNibName:@"MapsViewController" bundle:nil];
// locally store the navigation controller since
// self.navigationController will be nil once we are popped
UINavigationController *navController = self.navigationController;
// retain ourselves so that the controller will still exist once it's popped off
[[self retain] autorelease];
// Pop this controller and replace with another
[navController popViewControllerAnimated:NO];//not to see pop
[navController pushViewController:aViewController animated:YES];//to see push or u can change it to not to see.
Run Code Online (Sandbox Code Playgroud)
要么
MapsViewController *aViewController = [[MapsViewController alloc]
initWithNibName:@"MapsViewController" bundle:nil];
UINavigationController *navController = self.navigationController;
//Get all view controllers in navigation controller currently
NSMutableArray *controllers=[[NSMutableArray alloc] initWithArray:navController.viewControllers] ;
//Remove the last view controller
[controllers removeLastObject];
//set the new set of view controllers
[navController setViewControllers:controllers];
//Push a new view controller
[navController pushViewController:aViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
Pet*_*son 30
取自/sf/users/113368811/的解决方案,以便其他人可以更轻松地找到它.
这似乎是iOS8的最佳方式:
UIViewController *newVC = [[UIViewController alloc] init]; // Replace the current view controller
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]];
[viewControllers removeLastObject];
[viewControllers addObject:newVC];
[[self navigationController] setViewControllers:viewControllers animated:YES];
Run Code Online (Sandbox Code Playgroud)
Rod*_*nto 24
在Swift中:
let newVc = UIViewController()
var vcArray = self.navigationController?.viewControllers
vcArray!.removeLast()
vcArray!.append(newVc)
self.navigationController?.setViewControllers(vcArray!, animated: false)
Run Code Online (Sandbox Code Playgroud)
如果故事板中存在newVc:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let newVc = storyboard.instantiateViewControllerWithIdentifier("YourViewControllerIdentifier") as! UIViewController
var vcArray = self.navigationController?.viewControllers
vcArray!.removeLast()
vcArray!.append(newVc)
self.navigationController?.setViewControllers(vcArray!, animated: false)
Run Code Online (Sandbox Code Playgroud)
斯威夫特4:
self.navigationController.setViewControllers[]..
对我来说没有用.但我能够通过在实例变量中保存导航控制器并执行推/弹操作来解决问题.因此,可以无故障地更改控制器.
guard let navigationVC = self.navigationController else { return }
navigationVC.popViewController(animated: false)
navigationVC.pushViewController(myNewVC, animated: false)
Run Code Online (Sandbox Code Playgroud)
您可以使用此代码弹出或推送您的控制器。
对于目标 c
bool alreadyPushed = false;
//Check if the view was already pushed
NSMutableArray *viewControllers;
if ( (viewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers])) {
for (UIViewController *aViewController in viewControllers) {
if ([aViewController isKindOfClass:[YourControllerName class]]) {
NSLog(@"pop your view controller");
[self.navigationController popToViewController:aViewController animated:YES];
alreadyPushed = true;
break;
}
}
}
//Push Fresh View
if( alreadyPushed == false) {
NSLog(@"push your view controller");
YourControllerName *YourControllerObject = [[YourControllerName alloc]initWithNibName:@"YourNibName" bundle:nil];
[self.navigationController pushViewController:YourControllerObject animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
对于斯威夫特
var alreadyPushed = false
//Check if the view was already pushed
if let viewControllers = self.navigationController?.viewControllers {
for viewController in viewControllers {
if let viewController = viewController as? YourControllerName {
self.navigationController?.popToViewController(viewController, animated: true);
print(" Push Your Controller")
alreadyPushed = true
break
}
}
}
if alreadyPushed == false {
let YourControllerObject = self.storyboard?.instantiateViewControllerWithIdentifier("YourControllerIdentifire") as! YourControllerName
self.navigationController?.pushViewController(YourControllerObject, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
40419 次 |
最近记录: |