我有一个MyAppAppDelegate,它包含一个窗口和一个UITabBarController。
@interface MyAppAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
IBOutlet UITabBarController *rootController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *rootController;
@end
我有View A,它包含一个切换到View B的按钮。它是.h文件:
#import <UIKit/UIKit.h>
@class MyAppAppDelegate;
@class ViewBController;
@interface ViewAController : UIViewController {
IBOutlet UIView *view;
IBOutlet UIButton *switchToViewBButton;
}
@property (retain, nonatomic) UIView *view;
@property (retain, nonatomic) UIButton *switchToViewBButton;
-(IBAction) startSwitching: (id)sender;
@end
它是.m文件:
#import "ViewAController.h"
#import "ViewBController.h"
#import "MyAppAppDelegate.h"
@implementation ViewAController
/*skip the default generated codes*/
-(IBAction) startClock: (id)sender{
NSLog(@"Start Switching");
[rootController presentModalViewController:ViewBController animated:YES];
}
Plz注意到ViewB不能在UITabBarController上显示,只有在单击ViewA按钮时才显示。另外,我发现调试器告诉我rootController是未声明的。但我已经将MyAppDelegate导入该文件。很多......
答案 0 :(得分:1)
您需要合成rootController实例:
@synthesize rootController;
然后它应该工作。将此行代码放在.m文件中的实现行下面。你没有理由得到第二个错误,所以试试我的解决方案然后告诉我们发生了什么。 另外,请尝试用完整的句子写。根据我的经验,如果你在一篇论坛帖子中写得很好,你会得到更多可能会帮助你的人的尊重。
答案 1 :(得分:0)
不,你需要做这样的事情:
ViewBController* vc = [[ViewBController alloc] initWithNib: @"ViewBController" mainBundle: nil];
if (vc != nil) {
[rootController presentModalViewController: vc animated:YES];
[vc release];
}
您犯的错误是您正在传递ViewBController的{{1>} 类。相反,它需要实例。
答案 2 :(得分:0)
ViewBController* viewBController = [[[ViewBController alloc] initWithNibName: @"NameOfViewBControllerNibFile" bundle:nil] autorelease];
[self presentModalViewController:viewBController animated:YES];
您无法从rootController
访问ViewAController
,因为它属于MyAppAppDelegate
,而不是ViewAController
。如果您想访问负责UITabBarController
的{{1}},请在ViewAController
内使用ViewAController
因此,如果您希望self.tabBarController
执行上述操作,请将其更改为
UITabBarController
答案 3 :(得分:0)
ViewBController *vc = [[[ViewBController alloc] initWithNib:@"ViewBController"
mainBundle:nil] autorelease];
MyAppDelegate *appDelegate = (MyAppAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate.rootController presentModalViewController:vc animated:YES];