IOS xib生成界面和代码生成界面两种方式混合
应用程序代理类
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(, , , );
_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 == ) {
subAlterView.message = @"下次小心点";
}
else if (buttionIndex == ){
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
IOS xib生成界面和代码生成界面两种方式混合的更多相关文章
- 【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系
(1)设置状态栏的2种方式 --第一种方式就是我们在控制器中设置,系统默认就是交给视图控制器去管理的,这样不同视图控制器能够自己定义不同的状态栏例如以下: -(BOOL)prefersStatusBa ...
- Docker镜像构建的两种方式
关于Docker里面的几个主要概念 这里用个不太恰当的比方来说明. 大家肯定安装过ghost系统,镜像就像是ghost文件,容器就像是ghost系统.你可以拿别人的ghost文件安装系统(使用镜像运行 ...
- ios 实现跳转到评价界面的两种方式
要想在App内跳转到特定App的详情页或者评论页,首先需要获取到App的id.在 iTunes Connect网站上登陆之后,选择“我的App”,然后点击某个特定的App进入,在App信息的综合信息中 ...
- iOS打包为ipa的两种方式和生成P12证书的方式
iOS项目打包为ipa的两种方式: 准备工作:先行在Xcode里面打开preferences,填写apple id. 通过iTunes+Xcode 在Xcode里,把模拟器调整为iOS Device, ...
- centos安装图形界面通常有两种方式
centos安装图形界面通常有两种方式 1.通过系统安装,在配置选择软件界面,选择GNOME桌面模式.
- 两种方式实现java生成Excel
Web应用中难免会遇到需要将数据导出并生成excel文件的需求.同样,对于本博客中的总结,也是建立在为了完成这样的一个需求,才开始去了解其实现形式,并且顺利完成需求的开发,先将实现过程总结于此.本博文 ...
- ASP.NET 生成二维码(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
最近做项目遇到生成二维码的问题,发现网上用的最多的是ThoughtWorks.QRCode和QrCode.Net两种方式.访问官网看着例子写了两个Demo,使用过程中发现两个都挺好用的,Thought ...
- IOS文件操作的两种方式:NSFileManager操作和流操作
1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...
- maven生成war包的两种方式
war包即对WEB应用程序进行打包,用于应用容器的部署.如在jboss中只要把war包丢入deploy目录下即可发布自己的应用了.打包方式有很多中,很多工具本身就支持此功能.下面主要介绍通过maven ...
随机推荐
- lstm-思想2
LSTM 网络 Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息.LSTM 由 Hochreiter & Schmidhub ...
- Swift类型检查与转换
继承会发生在子类和父类中,如图所示,是一系列类的继承关系类图,Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类.这个继承关系类图的具体实现 ...
- 验证hashmap非线程安全
http://www.blogjava.net/lukangping/articles/331089.html final HashMap<String, String> firstHas ...
- JavaScript DOM编程艺术第一章:JavaScript简史
本系列的博客是由本人在阅读<JavaScript DOM编程艺术>一书过程中做的总结.前面的偏理论部分都是书中原话,觉得有必要记录下来,方便自己翻阅,也希望能为读到本博客的人提供一些帮助, ...
- java如何调用webservice接口
java调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用.理论上 ...
- spring定时器 @component
1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spr ...
- Ubuntu将软件(Sublime Text 2为例)锁定到启动器
Ubuntu中打开某安装好的软件,然后右击启动器(Launcher)上打开的图标就可以将该软件锁定到启动器或者从启动器解锁. 然而,有许多软件下载后直接解压就能用,不需要安装,这种情况采用上述方法锁定 ...
- 输入整数n(n<=10000),表示接下来将会输入n个实数,将这n个实数存入数组a中。请定义一个数组拷贝函数将数组a中的n个数拷贝到数组b中。
代码一大串! #include<stdio.h> ],y[]; void arraycopy (double c[],double d[],int m); { ;i<=m;i++) ...
- linux端口与进程命令
1 lsof命令 lsof -i:portNum 查出来与该端口相关的所有程序 2 netstat命令: netstat -lnp
- Javascript中最常用的55个经典技巧
Javascript中最常用的55个经典技巧1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键<table ...