可以为UITextFiled对象添加许多不同的重写方法,来改变文本字段的显示行为,这些方法都会返回一个CGRect结构,制定了文本字段每个部件的边界范围。以下方法都可以重写。
- textRectForBounds; //重写来重置文字区域
- drawTextInRect; //改变文字属性,重写时调用super可以按默认图形属性绘制
- placeholderRectForBounds; //重写来重置占位符区域
- drawPlaceholderInrect; //重写改变绘制占位符属性,重写时调用super可以按默认图形属性绘制函数,若自己完全重写绘制函数,就不用调用super了
- borderRectForBounds; //重写重置边缘区域
- editingRectForBounds; //重写来重置编辑区域
- clearButtonRectForBounds; //重写来重置clearButton的位置,改变size可能导致button的图片失真
- leftViewRectForBounds;
- rightViewRectForBounds;
2 通知
UITextField派生自UIControl,所以UIControl类中的通知系统在文本字段中也可以使用,除了UIControl类的标准事件,还可以使用下列UITextField类特有的事件
UITextFieldTextDidBeginEditingNotification
UITextFieldTextDidChangeNotification
UITextFieldDidEndEditingNotification
当文本字段退出编辑模式时触发,通知object属性存储了最终的文本
限制只能输入一定长度的字符
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
//string就是此时输入的那个字符 textField就是此时输入的那个输入框 返回YES就是可以改变输入框的值,NO相反
if([string isEqualToString:@"\n"]) //按回车可以改变
{
return YES;
}
NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //得到输入框的内容
if(self.myTextField == textField){ //判断是否是我们想要限定的那个输入框
if([toBeString length] > 20){ //如果输入框的内容大于20则弹出警告
textField.text = [toBeString substringToIndex:20];
.......
}
}
}