2009-08-20 83 views
7

我想限制用戶輸入UITextField中的空間。爲此我使用此代碼iPhone限制用戶輸入文本框中的空間

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    if (string == @" "){ 
     UIAlertView *error = [[UIAlertView alloc] initWithTitle:@"Error" message:@"You have entered wrong input" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
     [error show]; 
     return NO; 
    } 
    else { 
     return YES; 
    } 
} 

但它不工作....它有什麼不對?

回答

10

問題是

string == @" " 

是錯誤的。字符串的平等使用:

[string isEqualToString:@" "] 

:)。

+2

雖然這是真的,它不會告訴你,替換字符串是否包含空格,它只會告訴你替換字符串是否是單個空格。 – 2009-08-20 07:16:46

+0

@crackity_jones這是真的,但憑經驗來看,它工作得很好。 – 2013-04-08 00:40:13

+0

它工作,除非有人粘貼包含空格的文本 – budidino 2017-01-16 06:52:52

2

試試這個(在設置此 - (BOOL)文本框:(*的UITextField)文本框shouldChangeCharactersInRange:(NSRange)範圍replacementString:(的NSString *)字符串):

NSArray *escapeChars = [NSArray arrayWithObjects:@" ", nil]; 

NSArray *replaceChars = [NSArray arrayWithObjects:@"",nil]; 
int len = [escapeChars count]; 
NSMutableString *temp = [[textField text] mutableCopy]; 
for(int i = 0; i < len; i++) { 
    [temp replaceOccurrencesOfString: [escapeChars objectAtIndex:i] withString:[replaceChars objectAtIndex:i] options:NSLiteralSearch range:NSMakeRange(0, [temp length])]; 
} 
[textField setText:temp]; 
return TRUE; 
1
string == @" " 

是不是那只是比較每個string@" "的地址?那不是你想要做的比較。

你也想阻止他們輸入一個只是一個空格的字符串嗎?如果是這樣,那麼你需要將==更改爲適當的字符串比較,你很好。如果不是,並且您想要防止輸入字符串中的所有空格,那麼您需要一個字符串匹配器

9

這將搜索以查看您的替換字符串是否包含空格,如果有,則會拋出錯誤消息,它返回YES。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSRange spaceRange = [string rangeOfString:@" "]; 
    if (spaceRange.location != NSNotFound) 
    { 
     UIAlertView *error = [[UIAlertView alloc] initWithTitle:@"Error" message:@"You have entered wrong input" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
     [error show]; 
     return NO; 
    } else { 
     return YES; 
    } 
} 
4

目前的答案是這樣的:

設置視圖控制器符合UITextFieldDelegate(應該是這個樣子靠近你的代碼的頂部):

@interface YourViewController() <UITextFieldDelegate> 

... 

@ end 
@ implementation YourViewController 

... 

@end 

然後使textfield使用視圖控制器作爲它的委託。進入界面生成器,控制點擊文本框並拖動一行到視圖控制器下方的欄上的黃色圓圈,然後從彈出的菜單中選擇「委託」。您也可以通過在創建下一段中介紹的屬性後設置委託來以代碼形式執行此操作。用self.yourTextField.delegate = self這樣做;在適當的地方,可能在viewDidLoad中。

同時將textField設置爲視圖控制器上的屬性。通過轉到界面構建器,並在助理編輯器中打開其代碼,並控制從Interface Builder中的文本字段中單擊並拖動到列出屬性的代碼中的位置(@interface和第一個@結束)。然後在彈出的窗口中輸入一個名稱。在下面的代碼中,我使用「yourTextField」作爲例子。(如果您確定這是唯一將使用視圖控制器作爲其代表的文本字段,則可以跳過本節以及下面代碼中的外部if循環),但最好事先計劃未來的可能性)

然後你就可以禁止從空間即使使用下面的委託方法輸入:

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField == self.yourTextField) 
    { 
     if ([string isEqualToString:@" "]) 
     { 
      return NO; 
     } 
    } 
    return YES; 
} 
0

下面是我在用的密碼和確認密碼

PrefixHeader.pch文件中添加以下

#define NONACCEPTABLE_PASSWORD_CHARACTERS @" " 

並在下面的代碼中使用。

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


    if (textField==passwordTF || textField==confirmPasswordTF) { 
     NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:NONACCEPTABLE_PASSWORD_CHARACTERS]; 

     NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; 

     return [string isEqualToString:filtered]; 
    } 

    return YES; 
}