前文:
通过之前学习的知识,写出一个qq聊天的小demo
主要以tableview的纯代码布局为主,毕竟xib又搞不了动态的事
这篇日记,我只记录了注意事项
正文
先typedef enum{}xxx; 定义一个消息枚举
因为组数据只能为1组,所以直接1组返回就可以了
每个单元格肯定不能通过xib实现了,大小是动态的.纯代码方式.
获得屏幕的高:uiscreen mainscreen].bounds.size.width
需要注意的是 键盘弹出来 tableview需要向上平移 避免覆盖
如何监听键盘的事件呢? 需要用通知机制
通知机制
对于键盘这种全局的事务,就不能用事件来监听了,需要用通知
通知的好处可以全类发送,互相通信,键盘弹出来后,ios会把弹出的信息发送给
任何正在监听的类,告诉他这些类信息,如果不想监听直接移出监听就可以了.
我们也可以自定义自己的通知
通知的发布:
----需要发布/监听需要NSNotificationCenter对象
----NSNotification是通知的一个封装,每次你发送的通知就是一个这个对象.
----NSNotification中的属性:name,object,userinfo
通过类方法拿到NSNotificationCenter拿到这个对象 单例的全局的
[NSNotificationCenter defaultCenter]
拿到对象后使用方法
postNotificationName:“通知名” object:发送的对象(谁要发写谁)
userInfo:@{“键”:“值”}
通知的监听:
拿到NSNotificationCenter这个对象
—使用addObserver:监听者对象 selector:SEL(监听到执行的sel) name:通知名 object:对象
如果sel要加参,写NSNotification参数
对象里面的:通知名name,通知对象:object,对象字典信息:userinfo
附加:
如果监听不写监听对象,谁发的同名通知 都会监听到
如果通知名也写nil,那么全局通知都可以收到…
通知的移出
------重写-(void)dealloc 在类没指向的时候 移出 (不然程序必蹦)
------拿到NSNotificationCenter对象执行方法removeObserver:谁要移出的对象
对键盘的通知监听
创建NSNotificationCenter对象
使用对象方法 addObserver添加监听通知名为:
UIKeyboardWillShowNotification 将要弹出
UIKeyboardDidShowNotification 已经弹出
UIKeyboardWillHideNotification 将要隐藏
UIKeyboardDidHideNotification,已经隐藏
UIkeyBoardWillChangeFrameNotification 键盘尺寸即将改变.
都是常量,不用加""了
object参数不需要知道是谁发布的…监听就完事了
接受的参数对象NSNotification具体内容就看你监听的名字了
通过监听键盘的尺寸改变内的字典信息.拿到键盘弹出以后的rect,就可以为所欲为了
平移的话重设transform就行了
CGAffineTransformMakeTranslation
通知机制的我的浅显理解 废话:
如果接触过mcserver插件开发,通知的机制和事件差不多感觉…
但是ios中的的事件就是单独的事件,如按钮的点击事件,它是不能被全局发送的.
不是谁想去监听就可以监听的…要在设置创建按钮的时候固定好这事件
对的,和回调差不多.或者说执行了个内部的代码块一样似的.
新增属性
tableview.allowsSelection 可设置选中
image strectchableImageWithLeftCapWidth: topCapHeight:
用平铺的方式拉伸图片,两个参数是 从哪里开始保留
一般就是 左边的一半, 高度的一半,这样四周保留,从中间最小点切割.平铺.就行了
设置按钮的内边距contentEdgeInsets
如果要设置文本框左边显示uiview, .leftview就可以了 这样也可以曲线搞边距
一定要设置leftviewmode 枚举为一直显示,不然没效果
默认的textfield是有这个属性的,除非你要去掉默认的属性边框
监听文本框的发送,准守文本框的协议
-(bool)textfieldShouldReturn 这个方法就行
获得当前系统时间 就不写解释了,这个很基础
NSDate *nowDate = [NSDate date];
NSDateFormateer *formatter =[ [NSDateFormateer alloc]init];
formatter.dateformat = “时间HH:mm”;
NSString ti = [formatter stringFromDate:nowDate];