推动View控制器按钮单击不起作用

时间:2011-11-18 13:50:19

标签: iphone uiviewcontroller uinavigationcontroller uibutton

我已经广泛搜索了这个问题的答案,并且非常感谢一些帮助。我已经删除了我的其他应用程序以保持简单的问题。

我的根视图只是一个带有一个按钮的空白视图。它已使用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];

这确实有效,但我觉得这不是应该做的,有什么想法吗?

3 个答案:

答案 0 :(得分:3)

application: didFinishLaunchingWithOptions:中的代码非常混乱。您必须使导航控制器成为窗口的rootViewController,而不是导航控制器的根视图控制器。然后,行[self.window addSubview:navigationController.view];是多余的,应该删除。

答案 1 :(得分:0)

我不确定这是否有效,它可能只适用于coocs2d。但请尝试将其放在实施的开头。

self.isTouchEnabled = YES;

答案 2 :(得分:0)

可能有几件事可能会有问题。

  • 您没有连接IB中的所有内容。
  • 您的View2班级不是UIViewController的子类,而是UIView的子类(此时很难说)

我会研究第一个问题,即IB设置。确保您的touchUpInside操作连接器已连接到IB文件中switchView对象中的相应函数UIViewController