Ios 没有为自定义UITextfield调用deleteBackward

Ios 没有为自定义UITextfield调用deleteBackward,ios,swift,ios8,uitextfield,uitextfielddelegate,Ios,Swift,Ios8,Uitextfield,Uitextfielddelegate,我想在我的应用程序中开发类似密码的功能。为此,我使用了文本字段。输入密码成功。现在我想实现在numberpad的后退按钮操作中输入的清除密码文本。 下面是我声明协议的代码片段 @objc protocol BackPressDelegate { func backPressed(info: NSDictionary) } class CustomTextField: UITextField, UIKeyInput { var del1:BackPressDelegate? overrid

我想在我的应用程序中开发类似密码的功能。为此,我使用了文本字段。输入密码成功。现在我想实现在numberpad的后退按钮操作中输入的清除密码文本。 下面是我声明协议的代码片段

@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。我的问题是 当我按下“后退”按钮时,由于某种原因没有接到电话 numberpad.

尝试此子类:

// 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
//customTextField.h
#进口
@协议customTextFieldDelegate
@可选的
-(void)TextField将删除:(TextField*)TextField;
@结束
//customTextField.m
#导入“customTextField.h”
@customTextField的实现
-(无效)向后删除{
如果([[[UIDevice currentDevice]systemVersion]intValue]<8){
[超级删除向后];
}
if([\u deleteDelegate respondsToSelector:@selector(TextFieldWillDelete:)]{
[\u deleteDelegate textfield将删除:self];
}
}
-(BOOL)键盘输入应删除:(TextField*)TextField{
BOOL shouldDelete=是;
if([TextField InstanceRespondtoSelector:\u cmd]){
BOOL(*键盘输入应删除)(id,SEL,UITextField*)=(BOOL(*)(id,SEL,UITextField*)[UITextField instanceMethodForSelector:_cmd];
如果(键盘输入应删除){
shouldDelete=键盘输入shouldDelete(self,_cmd,textField);
}
}
如果([[[UIDevice currentDevice]systemVersion]intValue]>=8){
[自删除向后];
}
返回应删除;
}
//yourViewController.m
@界面视图控制器()
@结束
@实施
-(void)TextField将删除:(TextField*)TextField{
NSLog(@“将删除:%@”,textField.text);
}
@结束

UITextView

相同,您是否为CustomTextField设置了委托,即变量“del1”?是的,我已在viewcontroller中设置了委托。这是iOS 8中已知的错误。