自定义 UITextfield 没有调用 deleteBackward
Posted
技术标签:
【中文标题】自定义 UITextfield 没有调用 deleteBackward【英文标题】:deleteBackward not getting called for custom UITextfield 【发布时间】:2015-01-13 11:50:17 【问题描述】:我想在我的应用程序中开发类似密码的功能。为此,我正在使用文本字段。输入密码已成功完成。现在我想实现在数字键盘的后退按钮操作上输入的清晰密码文本。 这是我声明协议的代码 sn-p
@objc protocol BackPressDelegate
func backPressed(info: NSDictionary)
class CustomTextField: UITextField, UIKeyInput
var del1:BackPressDelegate?
override func deleteBackward()
super.deleteBackward()
if ((self.delegate?.respondsToSelector("backPressed")) != nil)
self.del1?.backPressed(["tag":self.tag])
为此,我创建了 uitextfield 的子类,其中我有 覆盖'deleteBackward()'方法。我还设置了委托 故事板中的 uitextfield 。我的问题是 deleteBackward 是 当我按下返回按钮时由于某种原因没有被调用 数字键盘。
【问题讨论】:
您是否为 CustomTextFiled 设置了委托,即。变量“del1”? 是的,我已经在我的视图控制器中设置了委托。 这是 ios 8 中的一个已知错误。***.com/questions/25371254/… 【参考方案1】:试试这个子类:
// customTextField.h
#import <UIKit/UIKit.h>
@protocol customTextFieldDelegate <NSObject>
@optional
- (void)TextFieldWillDelete:(TextField*)textField;
@end
// customTextField.m
#import "customTextField.h"
@implementation customTextField
- (void)deleteBackward
if([[[UIDevice currentDevice] systemVersion] intValue] < 8)
[super deleteBackward];
if ([_deleteDelegate respondsToSelector:@selector(TextFieldWillDelete:)])
[_deleteDelegate TextFieldWillDelete:self];
- (BOOL)keyboardInputShouldDelete:(TextField *)textField
BOOL shouldDelete = YES;
if ([TextField instancesRespondToSelector:_cmd])
BOOL (*keyboardInputShouldDelete)(id, SEL, UITextField *) = (BOOL (*)(id, SEL, UITextField *))[UITextField instanceMethodForSelector:_cmd];
if (keyboardInputShouldDelete)
shouldDelete = keyboardInputShouldDelete(self, _cmd, textField);
if ([[[UIDevice currentDevice] systemVersion] intValue] >= 8)
[self deleteBackward];
return shouldDelete;
// yourViewController.m
@interface yourViewController () <customTextFieldDelegate>
@end
@implementation
-(void)TextFieldWillDelete:(TextField*)textField
NSLog(@"will delete: %@", textField.text);
@end
同UITextView
。
【讨论】:
以上是关于自定义 UITextfield 没有调用 deleteBackward的主要内容,如果未能解决你的问题,请参考以下文章
在自定义 UITableCell 中从 UITextField 调用 textFieldShouldReturn 时遇到问题
需要在自定义 UITextField 中调用 shouldChangeCharactersInRange 并调用视图控制器函数通知更新
在自定义 UlTableViewCell 中使用 UITextField 时 resignFirstResponder 崩溃