我已经广泛搜索了这个问题的答案,并且非常感谢一些帮助。我已经删除了我的其他应用程序以保持简单的问题。
我的根视图只是一个带有一个按钮的空白视图。它已使用UINaviagationController
初始化。我想要做的就是按下按钮将新视图推入堆栈。目前,按下时按钮不执行任何操作,这是我的代码。
#import <UIKit/UIKit.h>
@class ViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
return YES;
}
然后在我的第一个视图控制器中:
#import "ViewController.h"
@implementation ViewController
-(IBAction)switchView:(id)sender
{
View2 *v2 = [[View2 alloc] initWithNibName:@"View2" bundle:nil];
[self.navigationController pushViewController:v2 animated:YES];
}
- (IBAction)配置正确,但仍然没有任何想法?
EDIT ::
我找到了解决方法。
似乎在尝试从根视图访问NavigationController时,使用[self.navigationController ....]不会将消息发送到navigationController的实例(不知道为什么!)。
我通过向UINavigationController类型的ViewController添加一个ivar,然后在初始化ViewController之后从AppDelegate设置ivar来实现它,如下所示:
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
//The UINavigationController declared int AppDelegate.h
navController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
[self.window addSubview:navController.view];
//Set the ivar on ViewController (navCon) to the UINavigationController we just
//initialized
self.viewController.navCon = navController;
现在,当将消息发送到ViewController.m中的NavigationController时,我使用了行
View2 *v2 = [[View2 alloc] initWithNibName:@"View2" bundle:nil];
[navCon pushViewController:v2 animated:YES];
这确实有效,但我觉得这不是应该做的,有什么想法吗?
答案 0 :(得分:3)
application: didFinishLaunchingWithOptions:
中的代码非常混乱。您必须使导航控制器成为窗口的rootViewController
,而不是导航控制器的根视图控制器。然后,行[self.window addSubview:navigationController.view];
是多余的,应该删除。
答案 1 :(得分:0)
我不确定这是否有效,它可能只适用于coocs2d。但请尝试将其放在实施的开头。
self.isTouchEnabled = YES;
答案 2 :(得分:0)
可能有几件事可能会有问题。
View2
班级不是UIViewController
的子类,而是UIView
的子类(此时很难说)我会研究第一个问题,即IB设置。确保您的touchUpInside
操作连接器已连接到IB文件中switchView
对象中的相应函数UIViewController
。