您的位置:首页 > 移动开发 > IOS开发

IOS xib生成界面和代码生成界面两种方式混合

2013-09-19 01:09 288 查看
应用程序代理类

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: