iOS开发学习笔记④ - 文本框 - 委托

文本框(UITextField)

新建一个文本框:

CGRect textFieldRect = CGRectMake(40, 70, 240, 30);
UITextField *textField = [[UITextField alloc]initWithFrame:textFieldRect];

// 设置UITextField对象的边框模式,便于查看其在屏幕上的位置
textField.borderStyle = UITextBorderStyleRoundedRect;
[backgroundView addSubView:textField];

UIResponder

UIResponder是UIKit框架中的一个抽象类。子类有:

  • UIView
  • UIViewController
  • UIApplication 等等

UIResponder定义了一系列方法,用于接收和处理用户事件。子类会覆盖这些方法,实现自己的事件相应代码。

UIWindow有一个firstResponder属性指向第一响应者。例如,当用户点击UITextfield对象时,UITextfield就会成为第一响应者。当某个UITextfield对象或UITextView对象成为第一响应者时,屏幕会弹出键盘;还可以在代码中向UITextField对象发送becomeFirstResponder消息,使其成为第一响应者。如要关闭键盘,则发送resignFirstResponder消息。


设置UITextField的键盘

// 占位符文本
textField.placeholder = @"Type in";
// 换行键类型
textField.returnKeyType = UIReturnKeyDone;

其他一些有用的属性:

属性用法
autocapitalizationType设置UITextField对象的自动大写功能。包括none(关闭自动大写)、words(单词)、sentences(句子)、all characters(所有字母)四种类型
autocorrectionType启用/禁用(设置为YES/NO,下同)UITextField对象的拼写建议功能
enableReturnKeyAutomatically启用/禁用UITextField对象的换行键自动检测功能。如果将属性设为YES,UITextField对象会自动检测用户输入,并根据是否输入了文字启动/禁用换行键
keyboardType设置UITextField对象弹出的键盘类型,例如ASCII Capable、E-mail Address、Number Pad、URL
secureTextEntry启用/禁用UITextField对象的安全输入功能。蜀国设置为YES,会以原点代替用户输入的文字,类似于常见的密码文本框

委托(Delegation)

目标-动作(Target-Action)设计模式工作方式:当某个特定时间发生时,发生事件的一方会向指定的目标对象发送一个之前设定好的动作消息。

UITextField这类复杂的对象,使用委托设计模式。
通过为UITextField对象设置委托,UITextField对象会在发生事件时向委托发送消息,由委托处理该事件。

例如,对于UITextField对象文本内容的事件,由以下两个对应的委托方法:

- (void)textFieldDidEndEditing:(UITextField *)textField;
- (void)textFieldDidBeginEditing:(UITextField *)textField;

在委托方法中,通常应该将对象自身作为第一个参数。

eg.在试图控制器A的loadView方法中,将UITextField对象的委托设置为ControllerA自身:

textField.delegate = self;

接下来,在ControllerA.m中实现textFieldShouldReturn方法:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    NSLog(@"%@", textField.text);
    return YES;
}

协议

凡是支持委托的对象,背后都有一个相应的协议(接口),声明可以向该对象的委托发送的消息。

声明协议的语法是,使用@protocol指令开头,后跟协议的名称。尖括号的NSObject是指NSObject协议,作用是声明包含NSObject协议额全部方法,最后使用@end指令结束。

@protocol UITextFieldDelegate <NSObject>

@optional

- (BOOL).....
- ......
- ......

@end

协议所声明的方法可以是必需的(required)or可选的(optional)。协议默认是必需。使用@optional指令,可声明为可选的。委托协议中的方法通常是可选的。

如果某个协议的方法是必需的,委托对象没有实现相应的方法,应用就会抛出异常。
为了防止此类问题,编译器会检查某个类是否实现了相关协议的必须方法。要让编译器能够执行此检查,必须将相应的类声明为遵守指定的协议,其语法格式为:在头文件或类扩展的@interface指令末尾,将类所遵守的协议以逗号分隔的列表形式写在尖括号里。

@interface ControllerA() <UITextFieldDelegate>
@end
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值