2013-08-05 31 views
0

我正在嘗試通過Hashtag創建搜索。用戶可以輸入一個單詞。如何過濾用戶輸入,以便每個單詞都有一個前綴

現在我需要驗證:

  • 用戶具有每字

  • 只有1#標籤有每個字只有1#標籤。

  • 如果這個詞不是以hashtag開頭,那麼放置一個。

  • 用戶未inputed超過1個空間刪除多餘的空間

  • 用戶沒有使用其他常用定界符來separe像昏迷或半昏迷

我生產的話下面的代碼,但每次我開始一個新的單詞,它會刪除這兩個單詞之間的空間,它變得不可能有2個單詞,或者它只是讓我有第二個單詞,但它不會將#添加到第二個單詞。

任何人都可以幫助我驗證的邏輯嗎?

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

    // Delete double spaces between words 
    NSString* str = [textField.text stringByReplacingOccurrencesOfString:@" " withString:@" "]; 

    if ([str isEqualToString:@""]) { 
     return YES; 
    } 

    // Check for other methods that people could use to separate strings 
    str = [str stringByReplacingOccurrencesOfString:@"," withString:@"#"]; 
    str = [str stringByReplacingOccurrencesOfString:@";" withString:@"#"]; 

    // separate string by Hashtag 
    NSArray * words = [str componentsSeparatedByString:@"#"]; 
    NSMutableArray * ma =[[NSMutableArray alloc]init]; 
    for (NSString* str4 in words) { 
     if (![str4 isEqualToString:@""]) { 
      // Separate string by space 
      NSArray * words2 = [str4 componentsSeparatedByString:@" "]; 
      if ([words2 count] != 0) { 
       [ma addObjectsFromArray:words2]; 
      } 
     } 
    } 
    words = [[NSArray alloc]initWithArray:ma]; 
    NSString * newStr = [[NSString alloc]init]; 

    // Make the new string 
    for (NSString* str2 in words) { 
     if (![str2 isEqualToString:@""]) { 
      NSString* str3 = str2; 
      str3 = [NSString stringWithFormat:@"#%@ ",str3]; 
      newStr = [newStr stringByAppendingString:str3]; 
     } 
    } 
    textField.text = newStr; 
    return YES; 
} 

回答

1

您每次用戶點擊鍵盤上的按鍵或粘貼到文本字段時,都會調用您使用的委託方法。

何時被調用,文本字段的text屬性仍然與用戶點擊該鍵之前的屬性相同。該方法被調用來詢問用戶的建議更改是否被允許進入該領域。所以,你的方法有幾個問題:

  • 你執行你的文本字段的變化前的內容全部驗證已實際取得,所以你實際上可以確認發生了什麼就進入以前的按鍵。您可以自行進行更改的委託方法的開始和新的字符串,執行你的驗證解決此問題:

    NSString *proposedText = [textField.text stringByReplacingCharactersInRange:range withString:replacementString]; 
    
  • 你返回YES,說這是確定以使提議的變更,也更新文本字段的文本值。這意味着建議的更改可能會發生在您剛剛更新的值上。如果您使用此方法自行設置文本,請返回NO

相關問題