6

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

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

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar  

被调用,但没有达到解除全屏搜索表视图并返回父视图控制器的目的。但是,如果我不在搜索类中编写此委托,它可以正常工作。我在 xib 和调用时设置了搜索栏代表:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

像这样:

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

我哪里错了?提前致谢。

4

3 回答 3

13

如果您想用 SearchBarController 关闭 UISearchBar,只需使用以下代码:

[self.searchDisplayController setActive:NO animated:YES];
于 2012-08-27T09:26:56.607 回答
1

你应该在委托函数中实现resign响应者,即

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar {
      [searchBar resignFirstResponder];
 }
于 2012-08-27T09:01:58.977 回答
-1

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

我们通过将数组设置为零来处理这种情况:

- (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 方法并填充数组,搜索栏将继续有用。工作没有问题

于 2014-03-02T17:25:01.473 回答