1 、全局变量,变量名前加下划线。和系统一致。
2 、 nil指针为空 @“”字符串为空 (内容为空)
== 判断内存地址 基本变量
对于一些基本类型 可以使用==来判断,但对于指针类型,使用==则判断的是指针保存的内容地址是否相等,而不是判断内存地址下的内容是否相等(应该通过方法来判断)
多个指针可以这向同一个对象
3 、判断两个字符串是否相等用 isEqualToString:@“”
4、警告框
不需要设置fram
不需要addSubview
如果需要添加多个按钮,在最后一个参数中添加,用逗号隔开,以nil结尾
5 、RGBA 0.0~1.0 灰度(亮度值) 0 0 0 黑色 1 1 1白色
6 、control以及其子类都可以绑定方法
7、默认在图片上添加按钮,按钮是不能被点击的,是因为默认图片视图不可交互
imageView.userInteractionEnable = YES;设置可交互
父视图可交互 子视图是否可交互看子视图自己
父视图不可交互 子视图也不可交互
默认不可交互的 UILabel UIImageView
点击登陆视图上的注册按钮,先把登陆视图移出再添加注册视图
点击注册视图上的的返回按钮,先把注册视图移出再添加登陆视图
========================================
标题黑色23号字体
注释绿色20号字体
内容黑色20号字体
==========================
1 动画
// 1 开始动画 beginAnimations
[UIView beginAnimations:nil context:nil];
//3 设置动画时间 setAnimationDuration
[UIView setAnimationDuration:3];
[UIView
//设置翻转样式
setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.window cache:YES];
//设置重复自动反向运动
[UIView setAnimationRepeatAutoreverses:YES];
//4 终点坐标
_image.frame = CGRectMake(320-80, 480-80, 80, 80);
//2 提交动画 commitAnimations
[UIView commitAnimations];
2 成为第一响应 键盘自动弹出
[_textFiledYongHuMing becomeFirstResponder]; 成为第一响应
resignFirstResponder 释放第一响应
//键盘自动消失
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touchesBegan");
[self.window endEditing:YES];
}
3 视图移除和添加
[_zhuCeView removeFromSuperview];
[self.window addSubview:_loginView];
==================
1 视图控制器类
UIViewController
单一控制视图,不在入口类中添加过多的代码(增加复杂性)
1 导入头文件
2 创建视图控制器对象
3 把对象赋值给self.window.rootViewController = aVi;
2 XIB文件
早期nib文件, .xib结尾
1 .File’s owner 文件所有者,就是指我们的视图控制器aViewController
2. First Responder 第一响应者
3.View 是视图控制器默认的view
self.view就是xib里的那个view
3 关联
1. xib上的控件与对象(指针关联)
1.1 关联按钮,绑定方法
点击Assistant editor按钮
1.2 右键xib中的控件,直接拖拽到.h文件的属性区域,松开,在弹出的的对话框中写入变量名,connect
1.3 注意,如果想要改变关联之后的变量名,必须删除原有的,连线也要切断,重新拖拽.
{
IBOutlet UITextField *_nameTF;
//IBOutlet 关键字,就是用来关联指针(.h)和控件(.xib)的
//Outlet 出口
//IB 前缀Interface Builder(接口建设者)
//IB 工具.早期的IB是与XCode分离的不利于开发,现在��到一起
}
按钮设置图片1 setimage 对应Custom类型 2 backgroudimage 对应system类型 二者区别
关联属性IBOutlet
关联方法IBAction
.h中 @property int age; 在.m里可以直接用_age;
如果在.m中创建和_age一样的局部变量,局部变量会覆盖全局变量
在.m中self.age == _age
关联属性可以将空间拖拽到大括号外(声明区域).如果在大括号外,会自动完成属性的描述,以后使用就可self.age或_age而直接拖拽到大括号中,默认只能使用_age(指针名);
4 知识点:在视图控制器中获取window对象。
在一个类中获取另一个类的window对象来承载view,需要在这个类中通过另一个的对象打点调用window
(导入头文件)
1 找window ZYAppDelegate *app = [UIApplication sharedApplication].delegate; 获取入口类 .delegate系统做这件事,代理
UIWindow *window = app.window;
2
UIWindow *window = [UIApplication sharedApplication].keyWindow
为什么要用window ?
在window上添加view
5 充分理解
window.rootViewController = vc
把vc赋给window的rootViewController,则默认会调用vc中的viewDidLoad方法(),像这样的只有把vc给rootViewController,运行程序才能在window上显示vc的view
6 把视图控制器的懒加载放置在动画执行下面
window.rootViewController = vc
这里把vc赋给window的rootViewController,则默认会调用vc中的viewDidLoad方法,像这样的只有把vc给rootViewController,运行程序才能在window上显示vc的view,而单纯的创建对象是不能显示,这种方法叫做懒加载(lazy load)
(loadView/nib文件)来加载view到内存 ——>viewDidLoad数据结构使用两种基本操作:推入(push)和弹出(pop):
- 推入:将数据放入堆栈的顶端(阵列形式或串行形式),堆栈顶端top指标加一。弹出:将顶端数据资料输出(回传),堆栈顶端资料减一。
self = [super init];
if (self)
{
// 这里的获得的解码过后的对象,用当前的属性保存,要使用self.
self.nameStr = [aDecoder decodeObjectForKey:KEY_NAME];
self.phoneStr = [aDecoder decodeObjectForKey:KEY_PHONE];
}
return self;
}