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