如果我以这种方式切换View,那是对的......(IPhone)

时间:2010-02-28 14:41:21

标签: iphone objective-c

我有一个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导入该文件。很多......

4 个答案:

答案 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];