尝试设置UITextField文本时执行选择器

时间:2010-10-06 11:47:54

标签: iphone objective-c recursion uitextfield

我正在尝试在执行UIControlEventEditingChanged事件时清除UITextField。

但是,当我将文本设置为空时,再次调用UIControlEventEditingChanged事件,这就是它继续运行的方式。

这是我的代码:

- (void)updateText {
    //other code
    textfield.text = @"";
    //other code
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [textfield addTarget:self action:@selector(updateText) forControlEvents:UIControlEventEditingChanged];
}

我希望能够在没有无限循环的情况下设置文本字段的文本!

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:3)

不确定这是最好的方法,但在对文本字段进行编程更新之前,您可以删除UIControlEventEditingChanged侦听器,然后再将其添加。

答案 1 :(得分:1)

- (void)updateText {
    //other code
    if (![textfield.text isEqualToString:@""]){
       textfield.text = @"";
    }
    //other code
}

它可能不是最优雅的解决方案,但它非常快速且肯定会起作用

答案 2 :(得分:0)

取消注册该事件的替代方法,并重新注册是放入BOOL以防止此特定递归。

@interface MyClass : () {
    BOOL clearText;
}

并在方法中:

- (void)updateText {
    if (clearText){
        clearText = NO;
        return;
    }
    //other code
    clearText = YES;
    textfield.text = @"";
    //other code
}