如何编写一个自定义的UItextField类
在我的应用程序中,我需要使用大量的文本字段,而且我不是真的希望每个viewcontroller类都包含textfields的代表,这些代码可能是混乱的,我只是想创build一个generics的类来处理文本字段的委托并返回我一个文本字段,我可以添加它作为一个子视图,我需要的地方。 我想把它作为一个图书馆,每当我需要一个文本字段,例如调用类
CustomTexTField *textField = [[CustomTextField alloc] initWithFrame:Frame]; // returns a textField whose delegate will be set to CustomTextField // // all i should do is just adding it as a subView // [self.view addSubView:textField];
这可能吗??。 提前致谢!!
作为Midhun回答,你需要创build一个自定义的TextField类,并在该类中设置委托。 喜欢这个
.h文件
@interface CustomTextField : UITextField<UITextFieldDelegate> @end
.m文件
@implementation CustomTextField - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code self.delegate = self; } return self; } - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ return YES; } - (void)textFieldDidBeginEditing:(UITextField *)textField{ } - (BOOL)textFieldShouldEndEditing:(UITextField *)textField{ return YES; } - (void)textFieldDidEndEditing:(UITextField *)textField{ } - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ return YES; } - (BOOL)textFieldShouldClear:(UITextField *)textField{ return YES; } - (BOOL)textFieldShouldReturn:(UITextField *)textField{ return YES; } @end
创buildUITextField
的子类并使用它。
@interface CustomTexTField : UITextField @end @implementation CustomTexTField //Add the stuffs here @end
无论您需要哪种文本字段,都可以使用:
CustomTexTField *textField = [[CustomTextField alloc] initWithFrame:customFrame]; [self.view addSubView:textField];
这帮助了我
@interface CustomTextField : UITextField <UITextFieldDelegate> - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.delegate = self; } return self; }
将委托添加到customTextField类,它为我工作。
谢谢!!
你可以使用更好的方法来实现这一点:
class MyTextField: UITextField, UITextFieldDelegate { //MARK:- PROPERTIES var shouldPreventAllActions:Bool = false var canCut:Bool = true var canCopy:Bool = true var canPaste:Bool = true var canSelect:Bool = true var canSelectAll:Bool = true var blockTextFieldShouldChangeCharactersInRangeWithReplacementString:((_ textField: UITextField, _ range: NSRange, _ string: String) -> Bool)? var blockTextFieldShouldReturn:((_ textField: UITextField) -> Bool)? var blockTextFieldShouldClear:((_ textField: UITextField) -> Bool)? //MARK:- var blockTextFieldShouldBeginEditing:((_ textField: UITextField) -> Bool)? var blockTextFieldShouldEndEditing:((_ textField: UITextField) -> Bool)? //MARK:- var blockTextFieldDidBeginEditing:((_ textField: UITextField) -> Void)? var blockTextFieldDidEndEditing:((_ textField: UITextField) -> Void)? var blockTextFieldDidEndEditingWithReason:((_ textField: UITextField, _ reason: UITextFieldDidEndEditingReason) -> Void)? //MARK:- INIT override init(frame: CGRect) { super.init(frame: frame) } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } override func awakeFromNib() { super.awakeFromNib() commonInit() } private func commonInit(){ // common initialization code.. } override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { if(self.shouldPreventAllActions){ return false } switch action { case #selector(UIResponderStandardEditActions.cut(_:)): return self.canCut ? super.canPerformAction(action, withSender: sender) : self.canCut case #selector(UIResponderStandardEditActions.copy(_:)): return self.canCopy ? super.canPerformAction(action, withSender: sender) : self.canCopy case #selector(UIResponderStandardEditActions.paste(_:)): return self.canPaste ? super.canPerformAction(action, withSender: sender) : self.canPaste case #selector(UIResponderStandardEditActions.select(_:)): return self.canSelect ? super.canPerformAction(action, withSender: sender) : self.canSelect case #selector(UIResponderStandardEditActions.selectAll(_:)): return self.canSelectAll ? super.canPerformAction(action, withSender: sender) : self.canSelectAll default: return super.canPerformAction(action, withSender: sender) } } //MARK:- DELEGATE func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if(self.blockTextFieldShouldChangeCharactersInRangeWithReplacementString != nil){ return self.blockTextFieldShouldChangeCharactersInRangeWithReplacementString!(textField,range,string) }else{ return true } } func textFieldShouldReturn(_ textField: UITextField) -> Bool { if(self.blockTextFieldShouldReturn != nil){ return self.blockTextFieldShouldReturn!(textField) }else{ return true } } func textFieldShouldClear(_ textField: UITextField) -> Bool { if(self.blockTextFieldShouldClear != nil){ return self.blockTextFieldShouldClear!(textField) }else{ return true } } //MARK:- func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { if(self.blockTextFieldShouldBeginEditing != nil){ return self.blockTextFieldShouldBeginEditing!(textField) }else{ return true } } func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { if(self.blockTextFieldShouldEndEditing != nil){ return self.blockTextFieldShouldEndEditing!(textField) }else{ return true } } //MARK:- func textFieldDidBeginEditing(_ textField: UITextField) { if(self.blockTextFieldDidBeginEditing != nil){ self.blockTextFieldDidBeginEditing!(textField) } } func textFieldDidEndEditing(_ textField: UITextField) { if(self.blockTextFieldDidEndEditing != nil){ self.blockTextFieldDidEndEditing!(textField) } } func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) { if(self.blockTextFieldDidEndEditingWithReason != nil){ self.blockTextFieldDidEndEditingWithReason!(textField,reason) } }
}
- 如何计算通过cellForRowAtIndexPath中的开关设置的单元格的heightForRowAtIndexPath。
- __connection_block_invoke_2中的错误:iPad上的连接中断
- iOS CorePlot如何安装
- 如何访问相机和相机卷Objective-C
- WebAPI无法parsing多部分/表单数据文章
- iOS应用程序库目录始终更改
- 让XCUIElement为Automate UITest执行3D触摸?
- React Native 31,New Appdelegate.m no localhost to change:networking请求失败
- AFNetworking 2.0:无法使用JSON从IOS进行POST