UISearchBar的取消和清除button不起作用在iOS 7中
我有一个xCode项目,其中包含一个“search栏和search显示控制器”的桌面视图,允许用户优化显示项目的列表。 一般来说,遵循http://www.raywenderlich.com/16873/how-to-add-search-into-a-table-view提供的指导。 我最近下载了支持iOS 7的最新xCode(版本5.0(5A1413)),并且针对不同的目标testing了有问题的应用程序。
在iOS 6目标(模拟器或实际设备)上运行此应用程序时,按预期方式工作意味着按取消button将删除search栏并按清除button(灰色小x)会清除所有已经键入的search条件用户。 但是当项目在iOS 7目标上运行时,清除和取消button都不起作用。
searchBarCancelButtonClicked方法是在这个项目中实现的,我已经validation了它在目标运行iOS 7时不被调用。
- (void)searchBarCancelButtonClicked:(UISearchBar *)SearchBar { NSLog(@"searchBarCancelButtonClicked called"); self.searchBar.text = nil; … // Hide Search bar when cancelled [self hideSeachBar]; [self.searchBar resignFirstResponder]; … }
我的表视图控制器设置为UISearchDisplayDelegate和UISearchBarDelegate。 看起来,这仍然是作为searchBar:textDidChange:在iOS 6或7目标上调用。
@interface ItemViewController () <UISearchDisplayDelegate, UISearchBarDelegate> … @end
我看不到任何其他与此或任何iOS 7更改材料相关的post(如https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html#//apple_ref/doc/uid / TP40013174-CH8-SW1 ),其中提到需要进行任何重新编码才能支持iOS7。
对此有何想法? 谢谢
我有同样的问题,我试着用下面的代码。 请试试这个。
-(void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller { controller.active = YES; [self.view addSubview:controller.searchBar]; [self.view bringSubviewToFront:controller.searchBar]; } - (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { tableView.frame = self.archiveListTblView.frame; } - (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller { controller.active=NO; [self.view addSubview:controller.searchBar]; }
button取消和button清除将不起作用,如果你触摸buttonsearch导航。 如果你点击search栏星号search,它正常工作=>这意味着如果search栏不能在屏幕上看到之前凝视search,那么这些button看起来像禁用了。
所以,我find了一个解决scheme,但它并不完全完美。 在使search栏成为第一个响应之前,必须将表视图滚动到顶部。 试试这个代码。
-(IBAction)goToSearch:(id)sender { // Make search bar visible on screen before make it response [_tableView setContentOffset:CGPointMake(0, 0) animated:NO]; // Make search bar active [candySearchBar becomeFirstResponder]; }
唯一的问题发生,如果你这样做,是你的表视图将滚动到顶部,这意味着当你取消search,你失去了当前的细胞索引之前。
这个问题似乎来自导航栏中半透明属性的新行为。
由于默认iOS 7导航栏是半透明的。 它看起来像重叠search栏,当你按下button后显示它。 如果您滚动到listView的顶部,并使用search栏,它应该正常工作。
尝试在您的控制器中设置:
float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue]; if (osVersion >= 7.0) { self.navigationController.navigationBar.translucent = NO; }
这应该很快解决问题。
但我认为,为了更好地解决问题,你应该看到iOS 7的转换指南 ,他们解释了如何处理半透明的导航条。
希望有所帮助。
我也有这个问题。 奇怪的是UISearchBarDelegate
其他委托方法正在被调用。 解决方法可能是:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ if ([searchText length] == 0) { NSLog("No Text"); } }
它为我工作
我search了互联网,并找不到解决scheme。 所以我改变了UItableview的行为。
而不是[searchBar becomeFirstResponder];
我向下滚动tableview。
- (IBAction)goToSearch:(id)sender { scroll down to show the table. // CGRect newBounds = self.TableView.bounds; // newBounds.origin.y =0; // // self.TableView.bounds = newBounds; //[searchBar becomeFirstResponder]; CGPoint contentOffset=self.TableView.contentOffset; contentOffset.y=0; [self.TableView setContentOffset:contentOffset animated:YES]; }
在我的ViewDidload中:
// CGRect newBounds = self.TableView.bounds; // newBounds.origin.y = newBounds.origin.y + searchBar.bounds.size.height; // self.TableView.bounds = newBounds; CGPoint contentOffset=self.TableView.contentOffset; contentOffset.y=self.TableView.bounds.origin.y + searchBar.bounds.size.height; self.TableView.contentOffset=contentOffset;
如果find某些原因,在iOS 7中,更改表视图边界导致search栏消失。 希望有所帮助。
在我的情况下,我已经将search栏重新定位到屏幕的顶部,并且在search栏上有一个不可见的视图。
因此取消button实际上没有被触动。
所以,我在下面调用[searchBarTextDidBeginEditing]方法的时候带了seachbar front。
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{ lc_SearchBarYPos.constant = 20.0f; //this is code to reposition the searchbar [self.view bringSubviewToFront:searchBar]; }
希望这可能有帮助。