美文网首页
iOS UITextField 自定义清除按钮

iOS UITextField 自定义清除按钮

作者: 大宝来巡山 | 来源:发表于2023-04-05 11:36 被阅读0次

有时候设计稿要求更改下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];

相关文章

网友评论

      本文标题:iOS UITextField 自定义清除按钮

      本文链接:https://www.haomeiwen.com/subject/yjmeddtx.html