当我调用它时,pushViewController什么都不做

时间:2014-02-10 14:54:38

标签: ios

我正在尝试将我的应用转到下一个屏幕。我开始创建一个带有2个屏幕的简单测试应用程序

在第一个vue上,我有一个按钮连接到以下代码以调出下一个屏幕

- (IBAction)atest:(id)sender {

    if (mHome == nil)
        mHome = [[cHome  alloc] initWithNibName:@"cHome" bundle:[NSBundle mainBundle]];

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

我提出了一个断点,以确保代码exicutes,它确实.....但下一个屏幕没有出现。

完整代码

#import <UIKit/UIKit.h>

@interface cHome : UIViewController{

}
- (IBAction)atest:(id)sender;
@end

@interface cHome ()

@end

@implementation cHome

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}


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

}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

3 个答案:

答案 0 :(得分:0)

如果要推送视图控制器,可以轻松创建从第一个视图控制器到第二个视图控制器的推送segue,然后使用

进行推送

[self performSegueWithIdentifier:@"yourSegueIdentifier" sender:self];

&#34;推送segues&#34;可以通过代码或故事板文件创建。

答案 1 :(得分:0)

您的代码中有错误:

mHome = [[cHome alloc] initWithNibName:@"cHome" bundle:[NSBundle mainBundle]];

我认为这是笔尖的名字。它应该是mHome而不是cHome。

mHome = [[cHome alloc] initWithNibName:@"mHome" bundle:[NSBundle mainBundle]];

你基本上不能在一个导航控制器上推送两个相同的视图控制器。

答案 2 :(得分:0)

就像添加到Unkn0wn上一样,演示如何在应用中呈现某些视图。

  • 为视图控制器添加故事板ID
    • 点击故事板层次结构中的视图控制器
    • 点击身份检查员
    • 在storyboard id框中添加一个storyboard id作为字符串

然后我在我的代码中做了类似的事情:

[self presentViewController:[self.storyboard nstantiateViewControllerWithIdentifier:@"Paint"] animated:NO completion:nil];
显然,你的标识符不是“Paint”,但这就是我使用的。这是我的简单方法,希望它能帮助你好运!

注意:我的应用程序中没有使用导航控制器。

修改

想要指出的是,这种方法使得控制器无处出现,没有动画(我的控件有特殊的动画作为视图控制器之间的过渡,因此我不需要为控制器本身设置动画)