我已经以编程方式创建了第二个视图控制器(MySecondViewController),它完成并连接,而不使用可视对象编辑器。
我的问题是,当我运行应用程序时,只会出现原始视图控制器(HelloWorldViewController);第二个视图控制器没有显示。当我点击HelloWorldViewController的视图时,什么都没有出现。
你能告诉我什么是错的吗?
windowBasedAppAppDelegate.h
#import <UIKit/UIKit.h>
//-- Add a forward reference to the HelloWorldViewController class --
@class HelloWorldViewController;
@interface windowBasedAppAppDelegate : NSObject <UIApplicationDelegate> {
//-- create an instance of the view controller--
HelloWorldViewController *viewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
//--Expose the view controller as a property--
@property (nonatomic, retain) IBOutlet HelloWorldViewController *viewController;
@end
windowBasedAppAppDelegate.m
#import "windowBasedAppAppDelegate.h"
#import "HelloWorldViewController.h"
#import "MySecondViewController.h"
@implementation windowBasedAppAppDelegate
@synthesize window;
@synthesize viewController;
//-- a second view controller object--
MySecondViewController *mySecondViewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
//-- add the new view to the current window--
//-- instantiate the second view controller --
mySecondViewController = [[MySecondViewController alloc]
initWithNibName:nil
bundle:nil];
// -- add the view from the second controller --
//[window addSubview:mySecondViewController.view];
[window addSubview:viewController.view];
[self.window makeKeyAndVisible];
return YES;
}
- (void)dealloc
{
[MySecondViewController release];
[viewController release];
[window release];
[super dealloc];
}
@end
MySecondViewController.h
#import <UIKit/UIKit.h>
@interface MySecondViewController : UIViewController {
//-- create two outlets, label and button --
UILabel *label;
UIButton *button;
}
//-- expose the outlets as properties --
@property (nonatomic, retain) UILabel *label;
@property (nonatomic, retain) UIButton *button;
// -- declaring the IBAction ---
- (IBAction) buttonClicked: (id)sender;
@end
MySecondViewController.h
#import "MySecondViewController.h"
@implementation MySecondViewController
@synthesize label, button;
- (IBAction) buttonClicked: (id)sender {
UIAlertView *alert =
[[UIAlertView alloc] initWithTitle:@"Action Invoked!" message:@"Button clicked" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
[alert release];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
HelloWorldViewController.h
#import <UIKit/UIKit.h>
@interface HelloWorldViewController : UIViewController {
}
@end
HelloWorldViewController.m
@implementation HelloWorldViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
从MySecondViewController.m
添加了代码//-- add the views to the view window --
[self.view addSubview:label];
[self.view addSubview:button];
[view exchangeSubviewAtIndex:1 withSubviewAtIndex:0];
self.view = view;
[super viewDidLoad];
答案 0 :(得分:1)
由于view
正在初始化并且它有一个正确的框架,问题可能是这段代码,
[window addSubview:mySecondViewController.view];
[window addSubview:viewController.view];
由于viewController
的{{1}}具有相同的框架,因此会将其添加到view
的{{1}}上。因此,您必须删除要显示的视图的第二行。
答案 1 :(得分:0)
您实际上从未将新视图控制器推到屏幕上。
mySecondViewController = [[MySecondViewController alloc]
initWithNibName:nil
bundle:nil];
// -- add the view from the second controller --
//[window addSubview:mySecondViewController.view];
[window addSubview:viewController.view];
你添加了viewController.view,(应该是未定义的...),但不是mySecondViewController.view。
此外,programHasFinishedLaunching可能不是推送它的最佳位置。如果我是你,我会在首页上放一个按钮来推动新视图,这样就更容易了。