<uitextinputdelegate>协议实现的问题</uitextinputdelegate>

时间:2013-08-14 22:24:48

标签: ios objective-c delegates uitextinput

我想要实现的是UITextField,它将单词视为字符。具体来说,我试图看到数学表达式sin(例如,作为一个字符。我想通过实现我自己的UITextInputDelegate来解决这个问题。但是,当我实现或采用这个协议时,这个协议中的四个必需函数永远不会被调用。我尝试通过以下方式实施它:

通过继承UITextField

@interface BIDUItextFieldDelegate : UITextField < UITextInputDelegate >

通过继承NSObject。

@interface BIDTextfieldInputDelegate : NSObject < UITextInputDelegate >

相应的.m文件包含:

@implementation BIDTextfieldInputDelegate


- (void)selectionWillChange:(id <UITextInput>)textInput
{
    NSLog(@"sWill");
}

- (void)selectionDidChange:(id <UITextInput>)textInput
{
    NSLog(@"sDid");
}

- (void)textWillChange:(id <UITextInput>)textInput
{
    NSLog(@"tWill");
}

- (void)textDidChange:(id <UITextInput>)textInput
{
    NSLog(@"tDid");
}

例如对于第二种方法(通过子类化NSObject),我在(id)init方法中在应用程序中显示的另一个自定义UITextfield类中执行以下操作:

//textInputDel is an instance of the custom NSObject class that adopts the above UITextInputDelegate protocol
self.textInputDel = [[BIDTextfieldInputDelegate alloc] init];

self.inputDelegate = self.textFieldDel;

有谁知道我做错了什么,或者有更好的解决方案?

1 个答案:

答案 0 :(得分:3)

UITextInputDelegate不是实施的协议;相反,系统会创建符合UITextInputDelegate的对象,并将其指定为符合.inputDelegate的第一响应者的UITextInput

UITextInputDelegate的方法是您的符合UITextInput的响应者在.inputDelegate上调用的方法,通知您已通过以下方式更改了文本或选择键盘输入。