2011-03-31 45 views
1

嗨 我在我的应用程序中使用了一系列文本框,我的要求是文本框只能接受一个字符。如果用户输入第二个字符,则不应执行任何操作。将最大容量设置为UITextField

我实现委托方法如下

- (BOOL)textField:(UITextField *)textField 
       shouldChangeCharactersInRange:(NSRange)range 
       replacementString:(NSString *)string{ 

if ([cellTextField.text length]>=MAXLENGTH && range.length==0) { 
    textField.text=[cellTextField.text substringToIndex:MAXLENGTH-1]; 
    return NO; 
} 
else { 
    return YES; 
} 

但我的要求不被使用上面的代码填充。

我的下一个要求是如果用户继续输入第二个字符,则该字符应该放置在连续的textField中(想象纵横填字或争夺应用程序)。如果可能的话,请在两种情况下帮助我,其他解决方案也是非常感谢。

谢谢你, dinakar

回答

2

以下代码为我解决了这个问题。

请确保您检查“\ b”(退格转义字符),以便用户仍可以删除。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    if ([textField.text length] >= MAXLENGTH && ![string isEqualToString:@"\b"]) 
     return NO; 
    return YES; 
} 

至于你的第二个要求去这真的不是太难。只需添加的几行代码到上面的if语句:

nextTextField.text = [nextTextField.text stringByAppendingString:string]; 

这应该添加刚才输入到您的下一个文本字段末尾的任何文字。您可能还想要更改退格处理的方式。喜欢的东西:

if ([string isEqualToString:@"\b"]) 
    nextTextField.text = [nextTextField.text substringToIndex:[nextTextField.text length]-1]; 

添加上述内部的代码if语句以及应该让你在整个字符串的结尾删除字符(在接下来的文本字段中的字符串的结尾)。


编辑:这里是我用来创建该字段的代码。

titleInput = [[UITextField alloc] initWithFrame:(CGRect){40,145,400,30}]; 
titleInput.borderStyle = UITextBorderStyleRoundedRect; 
titleInput.delegate = self; 
[self addSubview:titleInput]; 

干杯

+0

令人惊讶的是,它不适用于我。我使用了与u.i使用的相同的代码,使用code.did创建了textfield字段,我也试着和me.i一起询问我的第一个要求。 – Dinakar 2011-03-31 14:31:30

+0

@dinakar很奇怪。我也以编程方式创建了我的文本字段。你确定设置了文本框的代表吗?我将把我的创作代码放在我的答案中。 – 2011-03-31 14:54:23

+0

@tnx brenton其working.i不知道删除构建和再次运行后发生了什么 – Dinakar 2011-03-31 15:57:52

1
if(cellTextField.text.length >= MAXLENGTH) 
{ 
     [cellTextField2 becomeFirstResponder] 
} 

这将焦点设置为第二个文本字段

0

检查下面的功能在您的UITextField字符的数量;

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 

如果你的文本字段字符的数目多于一个只返回NO;

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
    { 
     if(mytextField1 == textField && [mytextField1.text length] >= 1) 
     { 
       [mytextField1 becomeFirstResponder]; 
       return NO; 
     } 
     else if(mytextField2 == textField && [mytextField2.text length] >= 1) 
     { 
       [mytextField3 becomeFirstResponder]; 
       return NO; 
     } 
     ------------------------------- 
     ------------------------------- 
     else if(mytextField8 == textField && [mytextField8.text length] >= 1) 
     { 
       [mytextField1 becomeFirstResponder]; 
       return NO; 
     } 

     return YES; 
    } 
+0

我想实现你的代码,但解决不了我的要求。 – Dinakar 2011-03-31 14:32:32