textFieldDidEndEditing替代方案

时间:2011-06-05 15:32:23

标签: iphone xcode ios uibutton uitextfield

您好我正在使用以下代码来禁用2 UIButtons,直到四个UITextField s中有数据

- (void)textFieldDidBeginEditing:(UITextField *)textField {


if (([brand.text length] >0) && ([qty.text length] >0) && ([size.text length] >0) && ([price.text length] >0)) {
    [calcOneButton setEnabled:YES];
    [calcTwoButton setEnabled:YES];

}
if (([brand.text length] ==0) || ([qty.text length] ==0) || ([size.text length] ==0) || ([price.text length] ==0)){

    [calcOneButton setEnabled:NO];
    [calcTwoButton setEnabled:NO];
}

}

- (void)textFieldDidEndEditing:(UITextField *)textField {

int ebtl = [brand.text length];
int eqtl = [qty.text length];
int estl = [size.text length];
int eptl = [price.text length];
NSLog(@"ebtl = %d eqtl = %d estl = %d eptl = %d",ebtl, eqtl, estl, eptl); 

if (([brand.text length] ==0) || ([qty.text length] ==0) || ([size.text length] ==0) || ([price.text length] ==0)){
    [calcOneButton setEnabled:NO];
    [calcTwoButton setEnabled:NO];
}
if (([brand.text length] >0) && ([qty.text length] >0) && ([size.text length] >0) && ([price.text length] >0)) {
    [calcOneButton setEnabled:YES];
    [calcTwoButton setEnabled:YES];
}

}

我的问题是,在用户点击textField之前,不会调用textFieldDidEndEditing。这需要点击屏幕然后按钮有一种方法可以避免这种情况,所以按钮会立即启用吗?

2 个答案:

答案 0 :(得分:2)

只有当用户点击textField时,该按钮才会激活。如果您使用弹出的普通键盘,请使用键盘上的DONE按钮摆脱键盘,然后在键盘自行调出时编写IBAction,然后启用按钮。

- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder]; //enable your buttons after this
return 1;
}

或使用IBAction:

-(IBAction) textFieldFinishedDone: (id) sender; // enable your buttons after this

只有当所有textFields都填满时,按钮才能激活?你可以这样做。 注释掉上面写的两个函数。使用IBAction,每当您按下DONE并退出键盘时,请检查所有textFields的状态。使用if-else块,在所有textField完成后显示按钮。

答案 1 :(得分:0)

为了获得最佳用户体验,我建议您在textField:shouldChangeCharactersInRange:replacementString:中执行始终返回YES的行为。

另外,上述方法中的逻辑是多余的, 首选实施:

- (void)textFieldDidBeginEditing:(UITextField *)textField {

  if (([brand.text length] >0) && 
      ([qty.text length] >0) && 
      ([size.text length] >0) && 
      ([price.text length] >0)) {
    [calcOneButton setEnabled:YES];
    [calcTwoButton setEnabled:YES];
  } else {
    [calcOneButton setEnabled:NO];
    [calcTwoButton setEnabled:NO];
  }

}