iOS基础 - UITextField
一、UITextField
1.常见属性
@property(nonatomic,retain) UIView *leftView; // 设置文本框左边显示什么控件,可以让文本框的内容往右边挪动
@property(nonatomic) UITextFieldViewMode leftViewMode; // 设置左边控件的显示模式
/*
UITextFieldViewMode的取值
UITextFieldViewModeNever, 永远不显示
UITextFieldViewModeWhileEditing, 当文本框正在编辑的时候显示
UITextFieldViewModeUnlessEditing, 文本框没有编辑的时候显示
UITextFieldViewModeAlways 永远显示
*/
// 当文本框发生了一些事情,会通知他的代理
@property(nonatomic,assign) id<UITextFieldDelegate> delegate;
2.代理方法UITextFieldDelegate协议中声明的方法
// 当文本框的return key按钮被点击的时候调用(右下角的按钮被点击)
- (BOOL)textFieldShouldReturn:(UITextField *)textField;
二、用宏定义自动生成代码
1.比如定义下面的宏
#define kTest(name) \
+ (id)name##WithDict:(NSDictionary *)dict \
{ \
return [[self alloc] initWithDict:dict]; \
}
那么kTest(person)就相当于生成下面的代码
+ (id)personWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}
2.知识点
1> 如果要分离相连的标识符,使用连接符##
2> \ 代表后面一行的代码也是属于宏的
3> 不要在最后一行增加 \
三、代理设计模式
1.使用场合:
1> 当A对象发生了一些事情,想告诉B对象,就让B对象成为A对象的代理
2> B对象想监听A对象发生的一些事情,就让B对象成为A对象的代理
2.步骤
1> 定义一份代理协议(比如QQGroupHeaderDelegate)(等着代理对象去实现)
* 协议名都以控件的类名开头,比如QQGroupHeader的代理协议叫做QQGroupHeaderDelegate
* 协议里面的方法一般都不强制代理去实现,所以方法前面加上@optional
* 协议里面的方法名都以类名开头(但是不加前缀,比如QQGroupHeader的代理方法都是以groupHeader开头)
* 协议里面的方法必须能传入控件本身这个参数
2> 定义一个代理属性
@property (nonatomic, weak) id<QQGroupHeaderDelegate> delegate;
3> 设置代理属性(代理用weak)
header.delegate = controller;
4> 通知代理
* 先检测代理有没有实现对应的代理方法
if ([_delegate respondsToSelector:@selector(groupHeaderClick:)]) {
[_delegate groupHeaderClick:self];
}
四、@property的内存管理策略
weak : UI控件、代理
strong : 除weak外的所有OC对象
assign : 基本数据类型
copy : NSString、NSMutableString
一.QQ聊天布局
1.更改UITextField的发送按钮
2.设置UITextField的代理
3.实现UITextField的代理方法
4.创建一条消息
5.细节处理
5.1 修改文本框占位符
5.2 让文本输入框文字靠右
5.3 监听Voice按钮
二.设计代理方法的时候,尽量传一些有用的参数。必须传遵守了谁的协议,这是规范。
三.面试解答:为什么要监听UITextField,因为当在UITextField输入文字的时候,系统会自动给UITextField发送代理方法。
四.QQ好友列表思路
1.先解析plist文件
2.创建一个QQGroup模型.
3.创建一个QQFriend模型.
注意:写代码规范,新创建的类都要以项目名字为前缀,方法名不要加前缀。
4.简化操作
5.将plist文件转换成模型。
6.实现数据源方法
7.用一个xib文件描述头部视图
8.自定义头部视图类,内部提供一个设置QQGroup的接口。
9.为了实现展开功能,还需要设置一个判断是否展开的属性。
10.监听头部视图按钮的点击。
1.状态取反
2.通知代理
3.旋转图片
11.给头部视图定义一个协议,并添加一个代理属性。
12.控制器作为头部视图的代理
13.用一个字典保存所有的头部视图,循环利用。
五.为什么要定义协议
当A对象发生一些事情想告诉B对象,就让B对象成为A对象的代理。
一个对象发生某些事情,通过代理告诉其他对象。任何对象都能作为代理,但是必须遵守协议。
代理的缺点是:一对一,只能设置一个代理。
代理的规范:代理协议必须以类名开头,并且要传入一个参数出去,用来告诉代理遵守了谁的协议。
协议方法不用以类名开头。
协议方法中如果一些方法,不一定要实现,需要用@optional声明。
在用代理调用代理方法时,需要判断代理是否实现了协议方法。
iOS基础 - UITextField的更多相关文章
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- iOS基础问答面试
<简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...
- iOS基础UI控件介绍-Swift版
iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...
- iOS 基础日记-修饰符
今晚随便温习了一下iOS 基础关于修饰符这块的东西,下面简单的来描述一下,其中有的也是在网络学习到的: strong与weak是由ARC新引入的对象变量属性 ARC的解释:ARC引入了新的对象的生命周 ...
- [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)
A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不 ...
- [置顶] IOS 基础入门教程
IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...
- iOS 基础:Frames、Bounds 和 CGGeometry
https://segmentfault.com/a/1190000004695617 原文:<iOS Fundamentals: Frames, Bounds, and CGGeometry& ...
- iOS 8 swift 键盘不出来 ios 8 uitextfield keyboard not appearing
ios 8 uitextfield keyboard not appearing //发现在iphone 6 and iPhone plus 上面键盘不出来.后来查了下原来要在模拟器里设置下 var ...
- iOS 基础入门--Bull' Eye 小游戏
说明 Bull's Eye小游戏是http://www.raywenderlich.com/store/ios-apprentice里非常酷的入门demo 跟着该教程一步步做下来便有了 ...
随机推荐
- crmplugin项目加入key文件
通常,办crm的plugin发展,然后dll文件导入系统,都需要加入项目key文件,那么怎么办? 在右上角单击指定项目--属性: 点击属性后,弹出属性编辑框: watermark/2/text/aHR ...
- document.domain跨域
原文:[转载]document.domain跨域 document.domain 用来得到当前网页的域名. 比如在地址栏里输入: javascript:alert(document.domain); ...
- node.js的npm安装
我不打算引进node.js的npm安装,但发现node.js通过管理一些包npm实现,或给一个简短的npm. 1.npm什么 npm是一个node包管理和分发工具,已经成为了非官方的公布 ...
- Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds解
产生了一个解决这个问题的方法是在项目部署到tomcat比长45第二,当项目是比较大的,框架复杂的问题经常发生. 解决方法非常easy,找到以下这个路径中 workspace\.metadata\.pl ...
- Linq实现对XML的简单增删查改
一.传统DOM创建XML方法 private static void CreateXmlDocWithDom() { XmlDocument doc =new XmlDocument(); XmlEl ...
- Android编码标准
只是练习是很难找工作那会儿在,简历基本上都是赶出去石沉大海,因为有项目开发没有实践经验.没有牛逼的背景.更重要的是,没有真才实学,虽然我在大学时读的是计算机专业,它可以被认为是一个技术教育.但--你知 ...
- Codeforces Round #235 (Div. 2) D. Roman and Numbers(如压力dp)
Roman and Numbers time limit per test 4 seconds memory limit per test 512 megabytes input standard i ...
- CSharp设计模式读书笔记(23):模板方法模式(学习难度:★★☆☆☆,使用频率:★★★☆☆)
模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模式角色与结构: 实现代码: using System; ...
- 如何监控第三方应用程序(SOAP or RESTful client)访问HTTPS当数据站点?
随着越来越多的互联网应用,在我们日常的开发和调试,其中(例如,调试SOAP和RESTFul什么时候),我们经常需要访问工具,通过第三方获取HTTPS网站.为了简化叙述说明,如本文所用,IE浏览器访问G ...
- Apache & WebDav 配置(二)
(二)WebDav配置 & put脚本编辑! WebDav 配置 ---------------- # 1. 修改了两个配置文件 # 2. 创建web访问用户的用户名和口令 # 3. 创建了两 ...