UITextField对象的重写绘制行为

可以为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];
          .......
    }
  }
}

你可能感兴趣的:(UITextField对象的重写绘制行为)