Iphone 禁用的UIButton取决于4个UITextFields
我有4个UIExtFields,我使用它们来保持2个UIButtons处于禁用状态,直到所有4个字段都输入了数据。到目前为止,我有以下代码Iphone 禁用的UIButton取决于4个UITextFields,iphone,xcode,ios,Iphone,Xcode,Ios,我有4个UIExtFields,我使用它们来保持2个UIButtons处于禁用状态,直到所有4个字段都输入了数据。到目前为止,我有以下代码 - (void)textFieldDidBeginEditing:(UITextField *)textField { if (([brand.text length] >0) && ([qty.text length] >0) && ([size.text length] >0) &&
- (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 {
}
}
我对此有很多问题:-
#define MAXLENGTH 5
#define MAXQTY 3
#define MAXSIZE 4
#define MAXBRAND 10
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (textField == brand) {
int lengtha = [brand.text length] ;
NSLog(@"lenghta = %d",lengtha);
if (lengtha >= MAXBRAND && ![string isEqualToString:@""]) {
brand.text = [brand.text substringToIndex:MAXBRAND];
return NO;
}
所有4个字段都采用相同的格式,但当我输入一个字符时,NSlog结果为0,然后第二个字符为1,依此类推。只需使用另一个委托方法即可 或者使用:
textfielddidediting:
就像Krypton在评论中告诉你的那样
或者使用textField:shouldChangeCharactersRange:replacementString:
在键入时直接启用/禁用
textField:(UITextField*)aTextField shouldChangeCharactersInRange:(NSRange) aRange replacementString:(NSString*)aRepString
{
NSString *newStr = [aTextField.text stringByReplacingCharactersInRange:aRange withString:aRepString];
if([newStr length]>0 && /*otherStringLength > 0*/)
//enable
else
//disable
return YES;
}
但我认为最常用的方法是使用
didEndEditing
-方法您是否设置了textfield didEndEditing:因为这将帮助您结合上面发布的方法。如果要记录每个字段的长度,可能是更新后一帧,还是1个字符总是记录为0?如果是这样,您可以在返回长度时暂时覆盖它。@Krypton记录字段长度的代码如下#定义MAXLENGTH 5#定义MAXQTY 3#定义MAXSIZE 4#定义MAXBRAND 10-(BOOL)textField:(UITextField*)textField应更改CharactersRange:(NSRange)range replacementString:(NSString*)string{If(textField==brand){int lengtha=[brand.text length];NSLog(@“lenghta=%d”,lengtha);if(lengtha>=MAXBRAND&![string isEqualToString:@”“]){brand.text=[brand.text substringToIndex:MAXBRAND];返回NO;}
你能把它复制出来并粘贴到你的问题中作为编辑吗?用零格式很难看到。@Krypton我在上面添加了代码,如果(([brand.text length]=0)| |([qty.text length]=0)| |([size.text length]=0)| |([price.text length]=0))看起来不错,我假设我将需要使用OR而不是,您只需考虑shouldchangeCharactersRange:
在文本字段中进行更改之前被调用。length1>0&&length2>0&&……=>启用
与length1==0 | | | length2==0 | |禁用
现在是我的问题是,在最后一个文本字段输入数据后,我点击其中一个按钮,我注意到didEndEditing
没有被调用,我怎么能让它每次都调用?我想didEndEditing没有被调用,因为第一响应者没有辞职。或者我会在键盘打开时禁用按钮(返回后,您可以辞去第一响应者的职务)和didEndEditing:
将被调用,或者您强制用户返回,因为按钮被键盘隐藏,或者在shouldChangeCharactersInRange
中执行启用/禁用操作。最后一种方法可以在键入时启用/禁用按钮。希望对您有所帮助。。。