2011-03-31 74 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