无法关闭“搜索”视图

时间:2012-08-27 08:43:23

标签: objective-c ios uitableview uisearchbar uisearchdisplaycontroller

我有一个带有tableview和searchbar的父类,它是tableview控制器的子类。 searchBar和searchdisplaycontroller的代理设置在从UISearchdisplaycontroller继承的单独类中。 tableview和searchbar的数据源和委托分别在此类中处理。这些课程属于ARC。

因此,当用户点击搜索时,控件从FilesListController(父)类转移到此类。现在,当用户点击取消按钮时,搜索栏代表在此类中设置,即

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar  

已被调用,但不会用于解除全屏搜索表视图并返回到parentviewcontroller。但是,如果我不在搜索类中编写此委托,则它可以正常工作。我已经在xib和调用中设置了搜索栏委托:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
像这样:

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

我哪里错了?提前谢谢。

3 个答案:

答案 0 :(得分:13)

如果你想用SearchBarController解雇一个UISearchBar,只需使用这个代码:

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

答案 1 :(得分:1)

你应该在委托函数中实现响应者的辞职,即

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

答案 2 :(得分:-1)

在应用程序运行期间的任何时候都可能出现内存警告,您必须假设将发生内存警告,并且必须重新创建视图和一次性对象。

我们通过设置nil我们的数组来处理这种情况:

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];

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

在执行segue操作之前,通过关闭搜索栏tableview:

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

收到内存警告后,再次调用viewDidLoad方法并填充数组,搜索栏将继续有用。没有问题的工作