UITextField和UILabel

UITextField

设置光标距离

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


UITextField和UILabel_第1张图片

那么该如何解决该问题呢?

其实我们只需要做简单的如下设置即可:

self.msgTextField.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 0)];
self.msgTextField.leftViewMode = UITextFieldViewModeAlways;
UITextField和UILabel_第2张图片

限制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的其它用法:

  1. 因为手机号我们习惯性的将其按照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]];
  1. 因为用户名和密码是绑定到一起的,所以我们会有这样的需求:当用户点击用户名后面的 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];

你可能感兴趣的:(UITextField和UILabel)