如何在Objective C中停止函数递归?

时间:2011-09-16 05:47:32

标签: iphone c++ objective-c c xcode

我有一个文字字段。

下面的函数附加到来自txtfield的IB的“编辑已更改”的UI事件。

该函数是递归的,因为我正在更改文本字段,因此它将调用

一次又一次,我可以在调用一次后停止该功能。

所以,我想停止这个循环函数..

-(IBAction) testEvents:(id) sender
{ 

    txtEditAmount.text=[txtEditAmount.text substringToIndex:([txtEditAmount.text length]-1)];




}

4 个答案:

答案 0 :(得分:3)

我的变种

-(IBAction) testEvents:(id) sender
{ 
    static BOOL flag = NO;
    if (flag) {flag=NO; return;}
    flag = YES;
    txtEditAmount.text=[txtEditAmount.text substringToIndex:([txtEditAmount.text length]-1)];
}

答案 1 :(得分:2)

尝试实施UITextFieldDelegate方法textFieldDidEndEditing:,而不是使用该事件回调,如下所示:

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    textField.text = [textField.text substringToIndex:
                      [txtEditAmount.text length] - 1];
}

因此,只有当用户停止编辑字段时,它才会切断最后一个字符。我想,取决于你想要做的事情。如果您尝试退回键入的任何内容,例如,密码字段保持空白但仍捕获用户键入的字符,而是实现协议方法textField:shouldChangeCharactersInRange:replacementString:,如下所示:

- (BOOL)textField:(UITextField *)textField
  shouldChangeCharactersInRange:(NSRange)range
  replacementString:(NSString *)string
{
    [enteredString appendString:string]; // store the character the user typed
    return NO; // leave the field blank
}

答案 2 :(得分:1)

您可以使用静态布尔值。

-(IBAction) testEvents:(id) sender
{
    static BOOL programmaticallyChanged=NO;
    if(programmaticallyChanged) {
        return;
    }
    programmaticallyChanged=YES;
    txtEditAmount.text=[txtEditAmount.text substringToIndex:([txtEditAmount.text length]-1)];
    programmaticallyChanged=NO;
}

答案 3 :(得分:1)

实施此方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  return YES;//it will allow edit to you if NO it will not allow to you
//return NO;when don,t want call that
}