自定义 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 并调用视图控制器函数通知更新

UITextField 没有显示键盘

在自定义 UlTableViewCell 中使用 UITextField 时 resignFirstResponder 崩溃

如何在 XIB 中调用 UITextField 的委托方法?

自定义 uitextfield 的保留周期(强参考)修复?