2013-09-25 99 views
0

我是新的目標C中,我有我的tableView搜索欄。我在我的searchBar文本字段中不需要限制輸入,例如我不需要輸入20個以上的符號,我該如何做?如何限制UISearchBar中的輸入?

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 

我嘗試寫水木清華像

searchBar.text.lenght == 20; 

,但也沒有用

我如何能做到這些

?或者當長度> 20時關閉鍵盤可能更容易。謝謝。

回答

6

你可以使用shouldChangeCharactersInRange:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    return ([textField.text length] + [string length] - range.length > 20) ? NO : YES; 
} 

編輯: 對不起。對於你的UISearchBar必須使用

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    return ([searchBar.text length] + [text length] - range.length > 20) ? NO : YES; 
} 

編輯: 見註釋下面

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    return ([searchBar.text length] + [text length] - range.length <= 20); 
} 
+0

完美!非常感謝!) –

+0

如果我測試並達到最大字符數,則不會調用searchBarButtonClicked-Method。這對我更好:http://stackoverflow.com/a/7317394/701900 – matzino

+0

只是一個風格的東西:否:是的有點醜。爲什麼不測試<= 20並放棄? NO:是 –

2

擴大對對方的回答,因爲你是新來的Objective-C

1.You會需要在視圖控制器中實現UISearchBarDelegate協議。

@interface ViewController : UIViewController <UISearchBarDelegate> 

2.您將需要分配委託

searchBar.delegate = self 

3.如果你想,如果你去到隱藏鍵盤在其他職位

指定實現委託回調20個字符,您可以在同一個代理功能中通過調用

[searchBar resignFirstResponder]; 
+0

完成了,謝謝:) :) 不能起來你回答,信譽低... –

0

對於未來在斯威夫特4:

func searchBar(_ searchBar: UISearchBar, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    let totalCharacters = (searchBar.text?.appending(text).count ?? 0) - range.length 
    return totalCharacters <= 20 
}