1.代理和协议
监听那些不能使用addTargetd监听的事件
比如说UITextField没有addTarget来监听,那么就要使用代理来实现
1>添加上<UITextFieldDelegate>,父类(控制器)称为子类(文本框)的代理
@interface ViewController () <UITextFieldDelegate>
2>使用协议的方法
实现代理,就要遵守协议(利用智能提示,快速编写代码),实现协议的方法。
以下是当按return后,处理什么事件
-(BOOL)textFieldShouldReturn:(UITextField *)textField
二者的关系:
代理,就是把需要做的事交给别人来处理,这是一种关系;
协议,是这种关系要遵守的内容,内容里有很多方法,编写代码就能实现具体的协议方法。
2.UITextField控件,改变光标所在控件,关闭键盘
[self.pwd becomeFirstResponder];
[self.pwd endEditing:YES];
3. 懒加载,
懒加载的好处:
1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强
2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合
3>只有当真正需要资源时,再去加载,节省了内存资源。
常见的有,代码创建控制器的View的时候,在属性的getter方法里实现懒加载。千万不能在getter方法里写"self.",否则会陷入死循环,程序奔溃的。
4.UIScrollView无法滚动的解决方法
1>*****没有设置contentSize;
self.scrollView.contentSize = CGSizeMake(892, 632);
2>scrollEnabled = NO;
3>没有接收到触摸事件 userinteractionEnabled = NO;
4>*****没有取消autolayout功能,(如果在storyboard中添加了scrollview的子控件),要想让scrollView滚动,必须取消autolayer功能。(用代码的方法添加scrollView控件,就可以勾选上autolayer)
5.iPhone屏幕尺寸、分辨率及适配
原文http://blog.youkuaiyun.com/phunxm/article/details/42174937
1.iPhone尺寸规格
设备 iPhone |
宽 Width |
高 Height |
对角线 Diagonal |
逻辑分辨率(point) |
Scale Factor |
设备分辨率(pixel) |
PPI |
3GS |
2.4 inches (62.1 mm) |
4.5 inches (115.5 mm) |
3.5-inch
|
320x480 |
@1x |
320x480 |
163 |
4(s) |
2.31 inches (58.6 mm) |
4.5 inches (115.2 mm) |
3.5-inch |
320x480 |
@2x |
640x960 |
326 |
5c |
2.33 inches (59.2 mm) |
4.90 inches (124.4 mm) |
4-inch |
320x568 |
@2x |
640x1136 |
326 |
5(s) |
2.31 inches (58.6 mm) |
4.87 inches (123.8 mm) |
4-inch |
320x568 |
@2x |
640x1136 |
326 |
6 |
2.64 inches (67.0 mm) |
5.44 inches (138.1 mm) |
4.7-inch |
375x667 |
@2x |
750x1334 |
326 |
6+ |
3.06 inches (77.8 mm) |
6.22 inches (158.1 mm) |
5.5-inch |
414x736 |
@3x |
(1242x2208->) 1080x1920 |
401 |
6.UIScrollView的常见属性
参考http://www.cnblogs.com/wendingding/p/3754210.html
contentSize是指内容显示的宽高,滚动的范围;
View的frame的宽高就是指能看到的范围,在storyboard上拖得控件的大小,就像一个窗户一样,屋里的内容可以随视线移动而移动,但是窗户不动,它限制了能看到的范围;
contentOffset是表示UIScrollView滚动的位置;//是UIScrollView相对frame左顶点的位置
contentInset是指UIScrollView的4周增加额外的滚动区域。在contentSize之前设置间距inset,会根据间距自动调整contentOffset,就不用人为设置offset了
重要说明
(1)UIScrollView的frame与contentsize属性的区分:UIScrollView的frame指的是这个scrollview的可视范围(可看见的区域),contentsize是其滚动范围。
(2)contentinset(不带*号的一般不是结构体就是枚举),为UIScrollView增加额外的滚动区域。(上,左,下,右)逆时针。contentinset可以使用代码或者是视图控制器进行设置,但两者有区别(注意区分)。
(3)contentsize属性只能使用代码设置。
(4)contentoffset是个CGpoint类型的结构体,用来记录ScrollView的滚动位置,即记录着“框”跑到了哪里。知道了这个属性,就知道了其位置,可以通过设置这个属性来控制这个“框”的移动。
(5)不允许直接修改某个对象内部结构体属性的成员,三个步骤(先拿到值,修改之,再把修改后的值赋回去)。
7.setter
//setter方法,系统加载了Main.storyboard后,给scrollView对象进行赋值(在viewDidLoad之前进行)
-(void)setScrollView:(UIScrollView *)scrollView{
_scrollView = scrollView;
//在contentSize之前设置间距inset,会根据间距自动调整contentOffset,就不用人为设置offset了
self.scrollView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
self.scrollView.contentSize = CGSizeMake(0, 600);
NSLog(@"%s",__func__);
}
8.NSTimer准确么?如果不准去,怎么办?
NSTimer通常用来有一定事件跨度的周期性时间处理。
不准确,用CADisplayLink(每秒60次刷新)
9.runLoop运行循环
http://www.cocoachina.com/ios/20150601/11970.html