【问题标题】:UIControlEventEditingChanged doesn't get fired when used parallel with delegate method shouldChangeCharactersInRange of UITextfield与 UITextfield 的委托方法 shouldChangeCharactersInRange 并行使用时,不会触发 UIControlEventEditingChanged
【发布时间】:2018-09-02 12:40:38
【问题描述】:

我在获取文本字段的UIControlEventEditingChanged 事件时遇到问题。

代码如下:

[_txtNum1 addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

那么这个方法:

 -(void)textFieldDidChange :(UITextField *) textField{}

当我没有实现文本字段的以下委托方法时,这完美地调用了textFieldDidChange

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

当我并行使用文本字段的委托方法shouldChangeCharactersInRange 时,它不会为textFieldDidChange 触发事件,而只会为shouldChangeCharactersInRange 获取事件。

提前感谢您的帮助。

【问题讨论】:

    标签: ios objective-c cocoa uitextfield


    【解决方案1】:

    你必须设置

     self.textfield.delegate = self;
    

    如果该方法返回NO,则不会调用change方法

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    
        return YES;
    }
    

    【讨论】:

    • 我已经设置了_txtNum1.delegate=self;我也收到委托方法 shouldChangeCharactersInRange 的事件。我不只是收到 '-(void)textFieldDidChange :(UITextField *) textField{}' 方法的事件。
    • 好的,我知道了,我已经从 shouldChangeCharactersInRange 返回了 NO。那是个问题。
    【解决方案2】:

    @DhavalBhimani 我刚刚创建了一个新应用程序并获取一个文本字段并将委托分配给它。只需复制您的代码并将其粘贴到我的演示中即可。似乎它的工作。你可以检查下面的代码。也许你错过了什么..

    - (void)viewDidLoad {
        [super viewDidLoad];
        [_txtDemo addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
    }
    
    -(void)textFieldDidChange:(UITextField *)textField
    {
        NSLog(@"called");
    }
    
    #pragma mark - textfield methods
    
    -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        NSLog(@"string = %@",string);
        return YES;
    }
    

    2018-03-24 00:27:35.292771+0530 演示目标 C[783:14964] 字符串 = h

    2018-03-24 00:27:35.382728+0530 Demo Objective C[783:14964] 调用

    2018-03-24 00:27:39.851133+0530 演示目标 C[783:14964] 字符串 = i

    2018-03-24 00:27:39.869326+0530 Demo Objective C[783:14964] 调用

    【讨论】:

    • 感谢您的回答,我遇到了问题,我从委托方法返回 NO,这就是问题所在。
    猜你喜欢
    • 2011-10-29
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多