0

我正在按照这里的教程使用 UINavigationController 在 ViewController 之间切换。如果我下载代码并按照教程操作,它可以正常工作,但当我尝试将其应用于不同的应用程序时,我会遇到以下混淆/问题。当我在“FirstViewController”中时,[self navigationController]如果我的 viewController 类中没有任何 navigationController,我该如何访问?在此示例中,我无法在 FirstViewController 中找出 navigationController 的来源或来源。有人可以解释一下这是如何工作的吗?

**注意:整个项目的完整源代码也可以在我上面链接的页面上找到。

这是让我感到困惑的一行:

[[self navigationController] pushViewController:secondViewController   animated:YES];

这是 viewController 的完整代码:

。H

#import <UIKit/UIKit.h>
@class SecondViewController;

@interface FirstViewController : UIViewController {

    IBOutlet SecondViewController *secondViewController;
}

@property(nonatomic, retain) SecondViewController *secondViewController;

- (IBAction)PressMe:(id)sender;

@end

.m

#import "FirstViewController.h"
#import "SecondViewController.h"


@implementation FirstViewController

@synthesize secondViewController;

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"First View";
}

- (IBAction)PressMe:(id)sender
{
    [[self navigationController] pushViewController:secondViewController animated:YES]; //This line
}


- (void)dealloc {
    [super dealloc];
}


@end
4

3 回答 3

1

来自Apple 的文档

如果接收器或其祖先之一是导航控制器的子级,则此属性包含拥有的导航控制器。如果视图控制器未嵌入导航控制器,则此属性为零。

所以你不必声明导航控制器。如果当前视图控制器已加载到导航控制器上,那么您引用的行将为您提供当前导航控制器

于 2012-08-07T20:07:48.253 回答
0

如果您使用的是 IB(如您在代码中所写),请右键单击该按钮,将其拖动到 SecondViewController,然后选择“Touch Up Inside”

于 2012-08-07T20:51:13.550 回答
0

简单地说,你没有任何导航控制器,所以你不能用这个从视图切换到另一个

[[self navigationController] pushViewController:secondViewController   animated:YES];

在您的 FirstView 中创建导航控制器对象并使用它在视图之间和您的 PressMe 方法中移动:

SecondViewController *secondView = [[secondView alloc] initWithNibName:@"SecondViewController" bundle:nil];
        [self.navigationController pushViewController:secondView animated:YES];
[secondView release];
于 2012-08-07T20:35:26.200 回答