您好我正在使用以下代码来禁用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
。这需要点击屏幕然后按钮有一种方法可以避免这种情况,所以按钮会立即启用吗?
答案 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];
}
}