2012-04-15 45 views
5

Khi nhấn thanh tìm kiếm, tôi muốn nhận chuỗi đã được nhập. Đối với điều đó tôi hiện đang sử dụng phương pháp này:Cách nhận chuỗi chuỗi tìm kiếm hiện tại khi nhập

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range  replacementText:(NSString *)text 
{ 
    NSLog(@"String:%@",mainSearchBar.text); 
    return YES; 
} 

Nhưng nó trả về chuỗi trước đó. Ví dụ id i loại "jumbo", nó cho thấy jumb và khi tôi nhấn backspace để xóa một mục và làm cho nó "jumb", nó cho thấy jumbo. tức là chuỗi trước trên thanh tìm kiếm.

Tôi nên làm gì để nhận chuỗi hiện tại? xin vui lòng giúp đỡ. Cảm ơn

+1

Tại sao bạn không sử dụng '-searchBar: textDidChange:'? –

Trả lời

12

Bên trong phương pháp bạn có được những văn bản nhập với:

NSString* newText = [searchBar.text stringByReplacingCharactersInRange:range withString:text] 

Swift 3:

let newText = (searchBar.text ?? "" as NSString).replacingCharacters(in: range, with: text) 
2

Hãy thử với:

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
    { 
     NSString *str = [mainSearchBar.text stringByReplacingCharactersInRange:range withString:text]; 
     NSLog(@"String:%@",str); 
     return YES; 
    } 
4

Phương pháp đại biểu thuận tiện nhất để truy xuất văn bản mới từ là:

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

Cả hai [searchBar text]searchText sẽ trả về văn bản mới được nhập. shouldChangeTextInRange cố ý báo cáo văn bản cũ vì nó cho phép bạn hủy chỉnh sửa trước khi nó xảy ra.

0

Swift 3 phiên bản:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String){ 
    print("searchText: \(searchText)") 
} 

này sẽ cháy bất cứ khi nào thay đổi văn bản vào thanh tìm kiếm.

Các vấn đề liên quan