6

Tôi có một lớp cha với tableview và thanh tìm kiếm trên đó là một phân lớp của bộ điều khiển xem bảng. Các đại biểu cho searchBar và searchdisplaycontroller được đặt trong một lớp riêng biệt được kế thừa từ UISearchdisplaycontroller. Nguồn dữ liệu và các đại biểu cho tableview và searchbar được xử lý trong lớp này một cách riêng biệt. Các lớp học dưới ARC.Không thể loại bỏ giao diện Tìm kiếm

Do đó, khi người dùng nhấn vào tìm kiếm, điều khiển sẽ chuyển từ lớp FilesListController (cha mẹ) sang lớp này. Bây giờ, khi một vòi nước dùng vào nút hủy, các đại biểu thanh tìm kiếm thiết lập trong lớp này ví dụ:

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar 

được gọi nhưng không phục vụ mục đích gạt bỏ màn hình searchtableview đầy đủ và trở về parentviewcontroller. Tuy nhiên, nếu tôi không viết đại biểu này trong lớp tìm kiếm, nó hoạt động đúng. Tôi đã thiết lập các đại biểu thanh tìm kiếm trong xib và gọi:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar 

như thế này:

self.searchResultsTableView.delegate = self; 
self.searchResultsTableView.dataSource = self; 
[parentFileViewController.searchDisplayController setDelegate:self]; 

tôi đi đâu vậy? Cảm ơn trước.

+0

[self.searchDisplayController setActive: NO anima ted: YES]; – jussi

+0

hey thanks @jussi .. nó hoạt động !!! Nhưng tại sao nó không tự mình loại bỏ? Điều này giống như chúng tôi đang buộc searchviewcontroller bỏ qua. –

+0

bởi vì một số muốn lưu trữ một số thông tin trước khi dissmissing Controller. Tôi sẽ đăng bài này như là một câu trả lời. – jussi

Trả lời

13

Nếu bạn muốn bỏ một UISearchBar với một SearchBarController, chỉ cần sử dụng Bộ luật này:

[self.searchDisplayController setActive:NO animated:YES]; 
1

bạn nên thực hiện chức responder trong hàm đại biểu ví dụ

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar { 
     [searchBar resignFirstResponder]; 
} 
+0

Điều này chỉ đơn giản là loại bỏ bàn phím, nhưng không loại bỏ Chế độ xem tìm kiếm và nút hủy. –

+0

trong trường hợp đó, jussi là đúng – cekisakurek

-1

cảnh báo bộ nhớ có thể xuất hiện tại bất cứ lúc nào trong thời gian chạy ứng dụng, bạn phải giả định một cảnh báo bộ nhớ sẽ xảy ra và các đối tượng xem và dùng một lần sẽ phải được tạo lại.

Chúng tôi đang xử lý tình huống như vậy bằng cách thiết lập để nil mảng của chúng tôi:

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 

if([self isViewLoaded] && self.view.window == nil) 
{ 
    self.view = nil; 
    keys = nil; 
    names = nil; 
    errorDuringNetworkCall = nil; 
} 
} 

Và bằng cách gạt bỏ tableview thanh tìm kiếm trước khi thực hiện các hoạt động segue:

[self performSegueWithIdentifier:@"navigateToNextScreen" sender:self]; 
self.searchBar.text = @""; 
[self.searchDisplayController setActive:NO animated:YES]; 

Sau một cảnh báo bộ nhớ được nhận phương thức viewDidLoad được gọi lại và các mảng được điền, thanh tìm kiếm sẽ tiếp tục hữu ích. công việc không có vấn đề

+0

Tôi không thấy điều này là trả lời câu hỏi ở tất cả –