无法在 IOS 中再次推送视图控制器
Posted
技术标签:
【中文标题】无法在 IOS 中再次推送视图控制器【英文标题】:Can not push viewcontroller again in IOS 【发布时间】:2013-08-09 18:00:19 【问题描述】:我有 3 个 ViewController,流程:rootviewcontroller 是 view1,当我点击 view1 中的“开始”按钮时,它会推送 view2,然后点击 view2 中的“状态”按钮,它会推送 view3。在 view3 中有 uitabbarcontroller 和里面 tabbarcontroller 有 2 UINavigationController 。我的问题是:当单击 tabbarcontroller 中 UINavigationController 中的“注销”按钮时,我回调 view2。但是当view2出现时,我点击“状态”按钮,它无法推送view3。 创建 UItabbarcontroller 的代码
self.tab=[[UITabBarController alloc]init];
CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (screenBounds.size.height == 568)
// code for 4-inch screen
// LoginButton.frame = CGRectMake(0, 518, 80, 49);
self.tab.view.frame = CGRectMake(0,0,320,568);
else if (screenBounds.size.height == 1024)
//code for ipad
else if (screenBounds.size.height == 480)
// code for 3.5-inch screen
// LoginButton.frame = CGRectMake(0, 430, 80, 49);
self.tab.view.frame = CGRectMake(0,0,320,480);
// FirstViewController
UploadTab *uploadview=[[UploadTab alloc]initWithNibName:nil bundle:nil];
UINavigationController *uploadTabItem = [[[UINavigationController alloc] initWithRootViewController: uploadview] autorelease];
uploadview.title=@"Uploading";
uploadview.tabBarItem.image=[UIImage imageNamed:@"Uploading.png"];
self.title = @"FirstViewControllerTitle";
//SecondViewController
ConvertTab *convertView=[[ConvertTab alloc]initWithNibName:nil bundle:nil];
UINavigationController *convertTabItem = [[[UINavigationController alloc] initWithRootViewController: convertView] autorelease];
convertView.title=@"Convert";
convertView.tabBarItem.image=[UIImage imageNamed:@"Convert.png"];
//ThirdViewController
CompletedTab *completedView=[[CompletedTab alloc]initWithNibName:nil bundle:nil];
UINavigationController *completedTabItem = [[[UINavigationController alloc] initWithRootViewController: completedView] autorelease];
completedView.title=@"Completed";
completedView.tabBarItem.image=[UIImage imageNamed:@"Completed.png"];
UIBarButtonItem * LogoutItem= [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Logout.png"] style:UIBarButtonItemStylePlain target:self action:@selector(logout)];
self.navigationItem.rightBarButtonItem = LogoutItem;
self.tab.viewControllers=[NSArray arrayWithObjects:uploadTabItem,convertTabItem, completedTabItem, nil];
[self.view insertSubview:self.tab.view belowSubview: uploadview.view];
[self presentModalViewController:self.tab animated:NO];
我使用下面的代码回调view2:
- (void) handleBack:(id)sender
ChooseViewController *chooseview = [[ChooseViewController alloc] init];
[self.navigationController pushViewController:chooseview animated:NO];
[chooseview release];
我使用了[self.navigationController presentModalViewController:loginView animated:YES];
。我认为它使 view2 无法推送 view3。
你有什么建议吗 ?非常感谢
【问题讨论】:
当你说“它不能推送view3”时,会发生什么?请告诉我们在您的 UI 中发生了什么以及将什么(如果有的话)打印到 Xcode 的调试控制台。 【参考方案1】:希望这可能有用:
NSArray *viewControllers = [[self navigationController] viewControllers];
for (int i = 0; i < [viewContrlls count]; i++)
id obj = [viewControllers objectAtIndex:i];
if ([obj isKindOfClass:[yourViewControllername class]])
[[self navigationController] popToViewController:obj animated:YES];
return;
使用它,您可以返回到任何特定视图。
【讨论】:
以上是关于无法在 IOS 中再次推送视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
无法在 IOS8 中使用 showSegue 以编程方式“推送”视图控制器