2017-03-16 112 views
1

我有一個UITextfield中,我想用戶輸入逗號分隔的文本限制用戶輸入只有七個逗號分隔的單詞

例如:象,狐狸,等,此外,我想限制用戶以最大7進入逗號分隔的單詞。

我已經在UITextfield

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSArray *numberOfWords = [self.tagsTextField.text componentsSeparatedByString:@","]; 
    if([numberOfWords count] > 6) 
    { 
     return NO; 
    } 
    else 
    { 
     return YES; 
    } 
} 

委託方法我無法達到預期的行爲,請幫忙寫這段代碼!

+0

也許你想使用一個簡單的正則表達式的呢? 這可能有助於:[鏈接](https://www.raywenderlich.com/30288/nsregularexpression-tutorial-and-cheat-sheet) – ConquerorsHaki

+1

您嘗試以未改變的文本獲取字數。您需要應用更改,然後嘗試獲得單詞數量。 ** [self.tagsTextField.text stringByReplacingCharactersInRange:range withString:string] **。但我認爲這是糟糕的用戶體驗。我作爲用戶不喜歡當我不能申請一些改變和應用程序不告訴我什麼錯誤。允許輸入更多的世界,但顯示錯誤。 – Sergey

+0

上述代碼中的問題是什麼? – Birendra

回答

0

試試這個:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange: (NSRange)range replacementString:(NSString *)string 
    { 
NSArray *numberOfWords = [self.tagsTextField.text componentsSeparatedByString:@","]; 
if([numberOfWords count] > 6 && [string isEqualToString:@","]) 
{ 
    return NO; 
} 
else 
{ 
    return YES; 
} 
} 

您可以阻止第二空間和類似的東西。

0

在您的代碼中,它將限制用戶輸入第七個單詞,並且它也不允許用戶在輸入第6個單詞之後進行擦除。

試試這個代碼,

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSArray *numberOfWords = [self.textField.text componentsSeparatedByString:@","]; 
    if([numberOfWords count] > 7) 
    { 
     if ([string isEqualToString:@""]) { 
     return YES; 
     } else { 
     return NO; 
     } 

    } 
    else 
    { 
     return YES; 
    } 
} 

這將允許用戶通過逗號分隔符高達7個字輸入,你也可以輸入7個字後刪除單詞。

0

請按照下面的代碼:7個逗號後需要7個逗號,它不會佔用任何空間,但是您可以編寫或刪除文本字段中的字符。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSArray *numberOfWords = [myTextField.text componentsSeparatedByString:@","]; 


    NSLog(@"%d",(int)numberOfWords.count); 

    NSLog(@"%@",numberOfWords); 

    if([numberOfWords count] > 7 && [string isEqualToString:@","]) 
    { 
     return NO; 
    } 
    else 
    { 
     return YES; 
    } 

} 

enter image description here

希望這有助於你..

UPDATE:

此代碼不能在文本框粘貼複製的文本的情況下工作。要禁用複製/粘貼的文本字段使用下面的代碼:Already Mentioned here

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    if (action == @selector(paste:)) 
     return NO; 
    return [super canPerformAction:action withSender:sender]; 
} 
+0

讓我們試着選擇** 3,4,5 **,複製它然後到最後一行並粘貼它。 – Sergey

+0

@Sergey你覺得我複製它:/?在得到這個問題之後,我開始嘗試做我的自我,並巧妙地與另一個答案匹配。當我發佈它,甚至我沒有看到任何職位,直到那時,刷新頁面後,我看到兩個更多的答案已經給出。 :/ –

+0

不,我不認爲你複製答案。我試圖向你解釋你的實現有一個bug,但是其他的實現也有這個bug。 – Sergey