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];
          .......
    }
  }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容