應用程序代理類
WKAppDelegate.m
// // WKAppDelegate.m // HelloWorld // // Created by easy5 on 13-9-18. // Copyright (c) 2013年 easy5. All rights reserved. // #import "WKAppDelegate.h" #import "WKViewController.h" @implementation WKAppDelegate - (void)dealloc { [_window release]; [_viewController release]; [super dealloc]; } //應用程序加載完畢以后調用 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. //傳入xib文件初始化控制器 self.viewController = [[[WKViewController alloc] initWithNibName:@"WKViewController" bundle:nil] autorelease]; //self.window.rootViewController = self.viewController; //已經執行了 //[self.window addSubview:self.viewController.view] self.window.rootViewController = self.viewController; //show the main window //讓窗口成為主窗口,只有主窗口才能與用戶進行交互 [self.window makeKeyAndVisible]; return YES; } //應用程序失去焦點時調用 - (void)applicationWillResignActive:(UIApplication *)application { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. } //應用程序進入后台(點擊Home鍵) - (void)applicationDidEnterBackground:(UIApplication *)application { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } //應用程序進入前台 - (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. } //應用程序程序獲取焦點(獲取焦點后才能跟用戶進行交互) - (void)applicationDidBecomeActive:(UIApplication *)application { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. } //當程序被關閉 - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } @end
xib生成界面和代碼生成界面兩種方式混合發現的問題:
1.在init方法里面代碼生成的界面元素無法顯示在控制器的View上;
2.重載loadView方法會造成死循環。
故把用代碼生成界面元素放在(控制器的)viewDidLoad中。
WKViewController.h
// // WKViewController.h // HelloWorld // // Created by easy5 on 13-9-18. // Copyright (c) 2013年 easy5. All rights reserved. // #import <UIKit/UIKit.h> #import <UIKit/UIButton.h> @interface WKViewController : UIViewController{ //不從xib生成空件 UIButton *_endWorldButton; UIAlertView *_endWorldAlterView; } //UI界面不用管理內存,所以用assign //如果用retain,就得自己 release //IBOutlet讓屬性出現在xib文件中 @property(nonatomic, assign) IBOutlet UITextField *qq; @property(nonatomic, assign) IBOutlet UITextField *pwd; //等價於- (void)login; //IBAction就void,而且讓方法出現在xib文件中 - (IBAction)login; @end
WKViewController.m
不明白的是Xcode自動生成的WKViewController.m中又對WKViewController聲明了一次
@interface WKViewController ()
@end
類WKViewController不是在頭文件WKViewController.h中已經聲明過了嗎?!!!真搞不懂。
// // WKViewController.m // HelloWorld // // Created by easy5 on 13-9-18. // Copyright (c) 2013年 easy5. All rights reserved. // #import "WKViewController.h" @interface WKViewController () @end @implementation WKViewController //- (id) init { // self = [super init]; // if (nil != self) { //} // return self; //} - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _endWorldButton = [UIButton buttonWithType:UIButtonTypeInfoDark]; CGRect _endBtnFrame = CGRectMake(25, 200, 100, 50); _endWorldButton.frame = _endBtnFrame; [self.view addSubview:_endWorldButton]; [_endWorldButton addTarget:self action:@selector(endWorldClick:) forControlEvents:UIControlEventTouchUpInside]; } - (void)endWorldClick:(id)sender{ UIButton *button = (UIButton *)sender; if (button == _endWorldButton) { NSLog(@"End World!"); _endWorldAlterView = [[UIAlertView alloc] initWithTitle:@"end world now" message:@"Really?" delegate:self cancelButtonTitle:@"NO" otherButtonTitles:@"OK", nil]; [_endWorldAlterView addButtonWithTitle:@"wuliao1"]; [_endWorldAlterView addButtonWithTitle:@"wuliao2"]; [_endWorldAlterView addButtonWithTitle:@"wuliao3"]; [_endWorldAlterView show]; } } - (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttionIndex { NSLog(@"clicked %i", buttionIndex); if (alertView == _endWorldAlterView) { UIAlertView *subAlterView = [[UIAlertView alloc] initWithTitle:@"Which you had choiced" message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; if (buttionIndex == 0) { subAlterView.message = @"下次小心點"; } else if (buttionIndex == 1){ subAlterView.message = @"OMG! 你真炸了"; } else { subAlterView.message = @"你TMD真無聊!"; } [subAlterView show]; [subAlterView release]; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)login{ NSLog(@"hello world!"); NSLog(@"QQ=%@, PWD=%@", _qq.text, _pwd.text); [self.view endEditing:YES]; } - (void) dealloc { [_endWorldButton dealloc]; [_endWorldAlterView release]; [super dealloc]; } @end