popToRootViewControllerAnimated什么都不做,无法让应用程序转到主屏幕

时间:2014-02-07 15:20:38

标签: ios

我无法让[self.navigationController popToRootViewControllerAnimated:YES];工作(无法让我的任何应用程序返回主屏幕)。我尝试创建一个新的空白测试项目但它仍然无效,因此就是我所做的:

一个。使用向导创建单个vue应用程序

B中。通过名为UIViewController

的Xcode(添加新文件)添加了cHome

℃。在主故事板上添加了一个按钮

d。通过拖放为其添加了一个Action,称为测试

电子。在生成的methed上,我添加了以下代码:

- (IBAction)atest:(id)sender
{
    if (mHome == nil)
    {
        mHome = [[cHome  alloc] initWithNibName:@"cHome" bundle:[NSBundle mainBundle]];
    }

    [self presentModalViewController: mHome animated:NO];
}

-G。我在attest.xib

添加了一个按钮

小时。添加了- (IBAction)atest:(id)sender;到标题并使用了UI将其链接到按钮

予。将以下代码添加到attest.m

- (IBAction)atest:(id)sender
{
    [self.navigationController popToRootViewControllerAnimated:YES];
}

学家在代码上设置一个断点

ķ。当我运行应用程序时,按第一个屏幕上的按钮然后按下下一个屏幕,断点关闭,但应用程序不会返回到屏幕前 代码

ViewController.h

#import <UIKit/UIKit.h>
#import "cHome.h"

@interface ViewController : UIViewController
{
    cHome *mHome;
}
- (IBAction)atest:(id)sender;

@end

ViewController.m

#import "ViewController.h"

@implementation ViewController

- (IBAction)atest:(id)sender {
    if ( mHome==nil)
    {
        mHome = [[   cHome  alloc]
                initWithNibName:@"cHome"
                bundle:[NSBundle mainBundle]];
    }

    [self presentModalViewController: mHome animated:NO];

}

cHome.h

#import <UIKit/UIKit.h>

@interface cHome : UIViewController
- (IBAction)atest:(id)sender;
@end

cHome.m

#import "cHome.h"

@implementation cHome

- (IBAction)atest:(id)sender
{
    [self.navigationController popToRootViewControllerAnimated:YES];
}    

@end

2 个答案:

答案 0 :(得分:3)

因为视图控制器是以模态方式呈现的,所以你需要解除它,而不是pop到root,如果你按下了控制器,这是合适的:

所以替换这段代码:

- (IBAction)atest:(id)sender
{
    [self.navigationController popToRootViewControllerAnimated:YES];
}

用这个:

- (IBAction)atest:(id)sender
{
     [self dismissViewControllerAnimated:YES completion:nil];
}

或者,如果要弹出视图控制器,则必须先将其推送。因此,请确保ViewController是故事板中UINaviagionController的根视图控制器,然后按如下所示更新代码:

// In `ViewController.m`
- (IBAction)atest:(id)sender
{
    if (mHome == nil)
    {
        mHome = [[cHome  alloc] initWithNibName:@"cHome" bundle:[NSBundle mainBundle]];
    }

    [self.navigationController pushViewController:mHome animated:YES];
}

// In cHome.m
- (IBAction)atest:(id)sender
{
    [self.navigationController popToRootViewControllerAnimated:YES];
}

答案 1 :(得分:0)

如果您使用导航控件作为app delegate中的根视图控件,则这足以进入主视图

- (IBAction)atest:(id)sender
{
    [self.navigationController popToRootViewControllerAnimated:YES];
}