我有一个文字字段。
下面的函数附加到来自txtfield的IB的“编辑已更改”的UI事件。
该函数是递归的,因为我正在更改文本字段,因此它将调用
一次又一次,我可以在调用一次后停止该功能。
所以,我想停止这个循环函数..
-(IBAction) testEvents:(id) sender
{
txtEditAmount.text=[txtEditAmount.text substringToIndex:([txtEditAmount.text length]-1)];
}
答案 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
}