UITextField
设置光标距离
有时候我们为UITextField设置了背景图片之后光标紧贴着左边,一点不美观,如下图所示:

那么该如何解决该问题呢?
其实我们只需要做简单的如下设置即可:
self.msgTextField.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 0)];
self.msgTextField.leftViewMode = UITextFieldViewModeAlways;

限制UITextField的输入长度
如果我们要限制一个UITextField的输入字数,我们会很容易的想到通过UITextFieldDelegate的中的
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
代理方法来做限制
比如:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == self.txtPwdField) {
if (textField.text.length >= 16)
{
[self.view endEditing:YES];
return NO;
}
}
return YES;
}
但是这种方法有一个问题,比如用户输入已经超过16个字符了,就不能再次输入了,但是如果此时我想回删字符的话也是做不到的,所以此时我们可以用另外一种方式来达到目的:给TextFiled添加个UIControlEventEditingChanged监听事件,在对应的监听事件中去处理逻辑
[self.txtPwdField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
-(void)textFieldDidChange:(UITextField * )textField
{
if (textField == self.txtPwdField) {
if (textField.text.length > 14) {
textField.text = [textField.text substringToIndex:14];
}
}
}
大功告成
后续
关于UITextField的其它用法:
- 因为手机号我们习惯性的将其按照123 3214 5432 这种方式去分割,便于我们查看 ,所以我们可以在其代理方法中去处理
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField==self.txtUNameField) {
if (range.length == 0)
{
if (textField.text.length == 3 ||textField.text.length == 8) {
textField.text = [NSString stringWithFormat:@"%@ ",textField.text];
}
}
}
return YES;
}
但是切记,在获取其值的时候一定要将空格个去掉:
_myPhoneNumber = [self.txtUNameField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
- 因为用户名和密码是绑定到一起的,所以我们会有这样的需求:当用户点击用户名后面的
clear button清空用户名的时候,我们应当让密码也清空,所以我们可以再UITextField的另一个代理方法中去实现这个功能
//called when clear button pressed. return NO to ignore。
//当用户点击用户名后面的Clear button的时候,将密码框清空
-(BOOL)textFieldShouldClear:(UITextField *)textField
{
if (textField==self.txtUNameField) {
self.txtPwdField.text = @"";
}
return YES;
}
UILabel
设置背景透明字体不透明的效果
通过storyboard设置
在属性栏里设置当前控件的backgroundColor–other–Opacity的百分比来控制背景透明,字体不透明。
通过代码设置
hudLabel.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.4];