【问题标题】:iOS: Detect backspace in empty UITextField with UITextField subclassiOS:使用 UITextField 子类检测空 UITextField 中的退格
【发布时间】:2015-11-17 19:44:34
【问题描述】:

检测退格的明确答案是创建 UITextField 的子类并覆盖 deleteBackward 属性。

我已经创建了一个 UITextField 子类的子类,但是我收到了这个错误:

'NSInvalidArgumentException', reason: '-[UITextField setMyDelegate:]: unrecognized selector sent to instance

这是我的子类代码:

我的 TextField.h:

@protocol MyTextFieldDelegate <NSObject>
@optional
- (void)textFieldDidDelete;
@end

@interface MyTextField : UITextField<UIKeyInput>
//create "myDelegate"
@property (nonatomic, assign) id<MyTextFieldDelegate> myDelegate;
@end

我的 TextField.m:

- (void)deleteBackward {
    [super deleteBackward];

    if ([_myDelegate respondsToSelector:@selector(textFieldDidDelete)]){
        [_myDelegate textFieldDidDelete];
    }
}

在我想要访问 UITextField 子类的 ViewController 中,我执行以下操作:

 #import "MyTextField.h"

 <MyTextFieldDelegate>
 @property (nonatomic, strong) IBOutlet MyTextField *passcode1;
 self.passcode1.myDelegate = self;

关于我为什么会收到无法识别的选择器错误的任何想法?在我看来,我在子类化 UITextField 方面做的一切都是正确的。

【问题讨论】:

  • sry...我错过了:P
  • @Mr.T 关于我收到错误的原因有什么想法吗?
  • 你的视图控制器中有 textfieldiddlete 方法吗?
  • 问题似乎与设置委托有关,与删除方法无关。
  • @Mr.T 我的 ViewController 中确实有 textFieldDidDelete,它永远不会被调用。视图加载时崩溃

标签: ios objective-c uitextfield subclass


【解决方案1】:

问题出在您的插座上。该属性是使用您的自定义类定义的,但在 Interface Builder 中您添加了一个普通的旧 UITextField。因此运行时的错误。在 Interface Buldier 中,将文本字段的类更新为您的自定义类。

【讨论】:

  • 谢谢!这就是问题所在,我在创建子类之前已经创建了 UI,所以我从没想过要返回并在界面生成器中进行任何更改。好电话!
猜你喜欢
  • 2010-12-30
  • 2015-06-12
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多