【问题标题】:textFieldDidEndEditing alternativetextFieldDidEndEditing 替代
【发布时间】:2011-06-05 15:32:22
【问题描述】:

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

- (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];
}

}

我的问题是textFieldDidEndEditing 直到用户点击离开文本字段时才会被调用。这就需要点击屏幕然后按钮有没有办法避免这种情况,所以按钮会立即启用?

【问题讨论】:

    标签: iphone xcode ios uibutton uitextfield


    【解决方案1】:

    只有当用户点击离开 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
    

    只有在所有文本字段都填满时,按钮才必须激活,对吗?你可以这样做。 注释掉你上面写的两个函数。使用 IBAction,每当您按下 DONE 并退出键盘时,检查所有文本字段的状态。使用 if-else 块,让您的按钮在所有文本字段完成后出现。

    【讨论】:

    • 我只在其中一个字段上使用普通键盘,其他3个都是数字键盘。我可以将操作链接到字段事件属性中的 Editing Changed 或 Value changed 吗?
    • 使用本教程为数字键盘创建返回键。 neoos.ch/news/46-development/…
    • 对不起,我没有正确阅读您的问题;完成所有文本字段后,按钮必须激活??
    • 是的,没错,我已经使用文本字段的事件编辑 cahnged 属性将它链接到一个动作。感谢您的帮助
    【解决方案2】:

    为了获得最佳用户体验,我建议执行 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];
      }
    
    }
    

    【讨论】:

    • 感谢您的回复,我已经在textField:shouldChangeCharactersInRange:replacementString: 下进行了很多工作,所以我现在已经使用事件编辑更改属性链接到一个操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多