今天重写了一个UITextField,对于以下几个方面做一个总结:
1、在设置UITextField的leftView或rightView时,经常需要根据实际的UI设计调整位置,例如系统本身的rightView紧贴着textField右侧,这样不太好看,这里有两种解决方法,需要根据rightView的样式决定来使用哪一种。
/** 重写设置rigntView的位置函数 */
- (CGRect)rightViewRectForBounds:(CGRect)bounds
{
CGRect rect = [super rightViewRectForBounds:bounds];
rect.origin.x -= 10;
return rect;
}
该方法使得rightView距离textField右侧有了10像素的距离。
还有一种方法比较简单,但是有限制:
view.contentMode = UIViewContentModeCenter;
就是设置contentMode为center,并且将rightView(自定义控件)的宽度比原来大一些,越大距离右侧越远。
这种方法对于设置没有背景或者背景色与textField一致的,有边框也不可以。因为该方法实际上并没有改变rightView与textField的距离,而是将rightView撑大,显得里面的文字或图片与textField有一段距离。
2、另外我们在开发中经常因为文本框空值或者输入错误对文本框做一些提醒操作,下面是控件抖动效果
// 控件抖动效果
-(void)shakeView:(UIView*)viewToShake
{
CGFloat t =2.0;
CGAffineTransform translateRight = CGAffineTransformTranslate(CGAffineTransformIdentity, t,0.0);
CGAffineTransform translateLeft =CGAffineTransformTranslate(CGAffineTransformIdentity,-t,0.0);
viewToShake.transform = translateLeft;
[UIView animateWithDuration:0.07 delay:0.0 options:UIViewAnimationOptionAutoreverse|UIViewAnimationOptionRepeat animations:^{
[UIView setAnimationRepeatCount:2.0];
viewToShake.transform = translateRight;
} completion:^(BOOL finished){
if(finished){
[UIView animateWithDuration:0.05 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
viewToShake.transform =CGAffineTransformIdentity;
} completion:NULL];
}
}];
}