无法在 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 以编程方式“推送”视图控制器

从父视图控制器再次推送时,子视图框架发生变化

第二次推送视图控制器xamarin ios后需要触摸以与tableview交互

iOS - 不支持多次推送相同的视图控制器实例

在 iOS 中推送视图控制器时难以绕过堆栈中的视图控制器

在一个按钮动作中推送两个不同的视图控制器-iOS