我正在按照教程here使用UINavigationController在ViewControllers之间切换。如果我下载代码并按照教程,它可以正常工作,但当我尝试将其应用于不同的应用程序时,我会遇到以下混淆/问题。当我在“FirstViewController”中时,如果我的viewController类中没有任何navigationController,如何访问[self navigationController]
?在这个例子中,我无法找到navigationController在FirstViewController中的来源和位置。有人可以解释这是如何工作的吗?
**注意:整个项目的完整源代码也可以在我上面链接的页面上找到。
这条线让我感到困惑:
[[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
答案 0 :(得分:1)
如果接收器或其祖先之一是导航控制器的子节点,则此属性包含拥有的导航控制器。如果视图控制器未嵌入导航控制器中,则此属性为nil。
因此您无需声明导航控制器。如果当前视图控制器已加载到导航控制器上,那么您引用的行将为您提供当前导航控制器
答案 1 :(得分: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];
答案 2 :(得分:0)
如果您正在使用IB(在代码中编写时),请右键单击该按钮,将其拖至SecondViewController,然后选择“Touch Up Inside”