一、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的更多相关文章

  1. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  2. iOS基础问答面试

    <简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...

  3. iOS基础UI控件介绍-Swift版

    iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...

  4. iOS 基础日记-修饰符

    今晚随便温习了一下iOS 基础关于修饰符这块的东西,下面简单的来描述一下,其中有的也是在网络学习到的: strong与weak是由ARC新引入的对象变量属性 ARC的解释:ARC引入了新的对象的生命周 ...

  5. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  6. [置顶] IOS 基础入门教程

    IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...

  7. iOS 基础:Frames、Bounds 和 CGGeometry

    https://segmentfault.com/a/1190000004695617 原文:<iOS Fundamentals: Frames, Bounds, and CGGeometry& ...

  8. iOS 8 swift 键盘不出来 ios 8 uitextfield keyboard not appearing

    ios 8 uitextfield keyboard not appearing //发现在iphone 6 and iPhone plus 上面键盘不出来.后来查了下原来要在模拟器里设置下 var ...

  9. iOS 基础入门--Bull' Eye 小游戏 

      说明   Bull's Eye小游戏是http://www.raywenderlich.com/store/ios-apprentice里非常酷的入门demo 跟着该教程一步步做下来便有了 ...

随机推荐

  1. 【足迹C++primer】47、Moving Objects(1)

    Moving Objects(1) * 功能:Moving Objects * 时间:2014年7月17日08:46:45 * 作者:cutter_point */ #include<iostr ...

  2. ext panel 它们的定义图像刷新

    从管理发展的近期回报.事实上,它采取了一些努力,以适应,应对来自另一个角度的问题只.外观似良好的效果.阿土,项目用到了EXT js.百度大神里面没找到一个合适的图片组件.自己写了个能够刷新的图片组件. ...

  3. Activity的LaunchMode情景思考

    此链接:http://blog.csdn.net/xiaodongrush/article/details/28597855 1. 有哪几种类型?分别有什么用? http://developer.an ...

  4. 都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行使用方法

    前几天在嵌入式linux上用到alsa command,网上查的资料多不给力,仅仅有动手一点点查,最终能够用了,将这个用法告诉大家,以免大家少走弯路. 0.先查看系统支持哪几个alsa cmd: ll ...

  5. ReactJS-render

    ReactJS分析之入口函数render ReactJS分析之入口函数render   前言 在使用React进行构建应用时,我们总会有一个步骤将组建或者虚拟DOM元素渲染到真实的DOM上,将任务交给 ...

  6. 【BZOJ3450】【Tyvj1952】Easy 可能DP

    联系: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  7. 用fildder 查看loveuv 刷流量时通信的数据

    loveuv是一个用来刷网页流量的站点,以下介绍怎么查看它刷流量时数据的传输 首先是注冊页面,邀请码UBMNEY 注冊账号登陆后,在账户资料页面http://www.loveuv.com/user/m ...

  8. app后端设计(0)--总文件夹

    原文:http://blog.csdn.net/newjueqi/article/details/19003775 做了接近两年app相关的系统架构,api设计,先后在两个创业公司中工作,经历过手机网 ...

  9. 详解linux vi命令用法

    vi是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,通过它可以编辑文件.当然,对UNIX系统略有所知的人,或多或少都觉得vi超级难用,但vi是最基本的编辑器,所以希望读者能好好把它学起来 ...

  10. 收集的VS2013的使用小技巧( 不断总结中)

    对于经常使用vs的朋友,如果能用键盘直接做的事,还是键盘更便捷点,现在我就把自己遇到的一些给写下来. 1.对一个函数的说明 先写一个函数,以及参数,完成后,在函数上输入///,vs会自动补全说明的信息 ...