有时候设计稿要求更改下iOS原生的清除按钮,有两种方式解决,推荐使用方式二。
方式一:可使用rightView方式添加自定义按钮,可以给UITextField添加一个分类,代码如下
.h文件
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UITextField (ClearBtn)
@property (nonatomic,strong) UIButton *clearBtn;
//@property (nonatomic,strong) UIView *clearView;
- (void)customClearBtnDefaultStyle;
@end
NS_ASSUME_NONNULL_END
.m文件
#import "UITextField+ClearBtn.h"
#import<objc/runtime.h>
#import "UITextField+ClearBtn.h"
#import "YHBigerTapButton.h"
static const void *clearBtnKey = &clearBtnKey;
//static const void *clearViewKey = &clearViewKey;
@implementation UITextField (ClearBtn)
@dynamic clearBtn;
- (void)customClearBtnDefaultStyle {
YHBigerTapButton *clearBtn = [YHBigerTapButton buttonWithType:UIButtonTypeCustom];
clearBtn.size = CGSizeMake(16, 16);//肉眼可见的按钮尺寸大小
[clearBtn setBackgroundImage:[UIImage imageNamed:@"cs-search-close"] forState:UIControlStateNormal];
[clearBtn addTarget:self action:@selector(clickClearBtn) forControlEvents:UIControlEventTouchUpInside];
clearBtn.hidden = YES;
self.clearBtn = clearBtn;
// UIView *clearView = [[UIView alloc]init];
// clearView.size = CGSizeMake(30, 30);//实际按钮尺寸大小,增加用户的点击范围
// [clearView addSubview:clearBtn];
// // clearBtn.frame.MaxX = clearView.frame.MaxX;
// CGFloat maxX = CGRectGetMaxX( clearView.frame);
// CGRect clearBtnFrame = clearBtn.frame;
//
// clearBtn.centerY = clearView.centerY;
// clearView.hidden = YES;
// self.clearView = clearView;
self.rightView = clearBtn;
self.rightViewMode = UITextFieldViewModeWhileEditing;
[self addTarget:self action:@selector(textFieldDidEditing:) forControlEvents:UIControlEventEditingChanged];
//
// UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(clickClearBtn)];
// [clearView addGestureRecognizer:tap];
}
- (void)setClearBtn:(UIButton *)clearBtn
{
objc_setAssociatedObject(self, clearBtnKey,clearBtn, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(UIButton *)clearBtn
{
return objc_getAssociatedObject(self,clearBtnKey);
}
//
//- (void)setClearView:(UIView *)clearView
//{
// objc_setAssociatedObject(self, clearViewKey,clearView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
//}
//- (UIView *)clearView{
//
// return objc_getAssociatedObject(self,clearViewKey);
//}
//清除的时候隐藏
- (void)clickClearBtn {
self.text = @"";
self.clearBtn.hidden = YES;
// self.clearView.hidden = YES;
}
//编辑的时候显示按钮
- (void)textFieldDidEditing:(UITextField *)textField {
if(StringIsNotNullOrEmpty(textField.text)){
self.clearBtn.hidden = NO;
}else{
self.clearBtn.hidden = YES;
}
// self.clearView.hidden = NO;
}
@end
方式二:利用KVC
// -----修改自定义样式-清除Button
UIButton *clearButton = [_navBarSearchTextField valueForKey:@"_clearButton"];
[clearButton setImage:[UIImage imageNamed:@"cs-search-close"] forState:UIControlStateNormal];
网友评论