我有一个带有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];
我哪里错了?提前谢谢。
答案 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方法并填充数组,搜索栏将继续有用。没有问题的工作