2011-11-06 129 views
0

我试图在点击应用程序中的按钮时加载新视图。 我得到的错误是 -按下按钮时切换视图

View Switcher[6867:207] -[UIView pushViewController:animated:]: unrecognized selector sent to instance 0x6010660 

和源代码片断 -

-(IBAction) blueButtonPressed:(id)sender{ 

if(self.yellowViewController == nil){ 
    YellowViewController *yellowController = [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil]; 
    self.yellowViewController = yellowController; 
    //[yellowController release]; 

    //[self.view addSubview:yellowController.view]; 
//[self.view pushViewController:self.yellowViewController]; 
    [self.navigationController pushViewController:self.yellowViewController]; 
[yellowController release]; 
} 
//[self.navigationController pushViewController:self.yellowViewController animated:YES]; 
} 

这里是我使用的头文件 -

#import <UIKit/UIKit.h> 

@class BlueViewController; 
@class YellowViewController; 


@interface BlueViewController : UIViewController { 
YellowViewController *yellowViewController; 
BlueViewController *blueViewController; 
} 
-(IBAction)blueButtonPressed:(id)sender; 

@property(retain) YellowViewController *yellowViewController; 
@property(retain, nonatomic) BlueViewController *blueViewController; 
@end 

链接到的Xcode项目是 - https://rapidshare.com/files/2403429896/View_Switcher.zip

+0

如果您仅取消注释if语句之外的方法调用,会发生什么情况? –

+0

而你的财产yellowViewController设置为(保留)? –

+0

最终结果是一样的(在模拟器中没有任何反应),但我确实得到了一个新的警告 - 不兼容的Objective-C类型结构YellowViewController *',期望'结构UIViewController *'当传递参数1'pushViewController:animated :'来自不同的Objective-C类型 –

回答

3

pushViewController是一个UINavigationController方法。

[self.navigationController pushViewController:self.yellowViewController animated:YES]; 

我假设你是在一个UIViewController子类


你可以发布的Xcode项目,我需要看到这一点。


好的,我查看了你的代码,问题是你没有任何navigationController。您的应用的结构类似于基本应用,不像导航基础应用。
结果是,你的self.navigationController ==零,这就是为什么这个调用被忽略。

在您的应用程序委托你需要一些代码看起来像这样

UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:switchViewController]; 
navCon.navigationBarHidden = YES; 
self.window.rootViewController = navCon; 
[window makeKeyAndVisible]; 

在applicationFinised ...


在你的代码,当你点击你的交换机上的工具栏,它的“工作”,因为您使用此代码:

[blueViewController.view removeFromSuperview]; 
[self.view insertSubview:yellowViewController.view atIndex:0]; 

而且没有导航控制器在那个过程中。

+0

是的,我在UIViewController子类,但是当我使用self.navigation控制器,我不能移动到下一个视图。 –

+0

奇怪,当你使用self.navigationController时,你会得到一个错误或什么? –

+0

不,没有错误消息。它只是忽略点击 –

1

UIView没有pushViewController:animated:作为一种方法。

可以推只能在UINavigationController的

+0

嗨,我删除了动画:是的,但仍然是相同的错误信息 –

+1

因为整个pushViewController方法用于导航控制器 – Wesley

1

您应该使用[self.view addSubview:yellowController.view];

最好有一个导航控制器,你push和pop控制器或。