UISearchBar的属性和showsScopeBar
来源:互联网 发布:小学语文课文朗读软件 编辑:程序博客网 时间:2024/06/05 07:00
昨天研究了UISearchBar,今天遇到了showsScopeBar问题, 还是继续说一下UISearchBar 吧
属性
作用
UIBarStyle barStyle
控件的样式
id<UISearchBarDelegate> delegate
设置控件的委托
NSString *text
控件上面的显示的文字
NSString *prompt
显示在顶部的单行文字,通常作为一个提示行
NSString *placeholder
半透明的提示文字,输入搜索内容消失
BOOL showsBookmarkButton
是否在控件的右端显示一个书的按钮(没有文字的时候)
BOOL showsCancelButton
是否显示cancel按钮
BOOL showsSearchResultsButton
是否在控件的右端显示搜索结果按钮(没有文字的时候)
BOOL searchResultsButtonSelected
搜索结果按钮是否被选中
UIColor *tintColor
bar的颜色(具有渐变效果)
BOOL translucent
指定控件是否会有透视效果
UITextAutocapitalizationType
autocapitalizationType
设置在什么的情况下自动大写
UITextAutocorrectionType
autocorrectionType
对于文本对象自动校正风格
UIKeyboardType
keyboardType
键盘的样式
NSArray *scopeButtonTitles
搜索栏下部的选择栏,数组里面的内容是按钮的标题
NSInteger selectedScopeButtonIndex
搜索栏下部的选择栏按钮的个数
BOOL showsScopeBar
控制搜索栏下部的选择栏是否显示出来代理列表:
编辑代理
– searchBar:textDidChange:
– searchBar:shouldChangeTextInRange:replacementText:
– searchBarShouldBeginEditing:
– searchBarTextDidBeginEditing:
– searchBarShouldEndEditing:
– searchBarTextDidEndEditing:
点击按钮
– searchBarBookmarkButtonClicked:
– searchBarCancelButtonClicked:
– searchBarSearchButtonClicked:
– searchBarResultsListButtonClicked:
范围代理
– searchBar:selectedScopeButtonIndexDidChange:
searchBar的范围控件showsScopeBar,官方学名叫Scope Buttons。
首先就要设置这个属性:
self.searchBar.showsScopeBar = YES;
然后要给他添加按钮。比如说,这样:self.searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"BOY",@"GIRL",@"ALL",nil];
还有一个很重要的事情就是我们要实现这个代理UISearchBarDelegate里的这个方法searchBar:selectedScopeButtonIndexDidChange:。告诉表格,你选择的范围是啥。
还有要是设置默认选择哪个按钮的话,要设置这个属性,像这样就是默认选中第1个啦。
self.searchBar.selectedScopeButtonIndex = 0;
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{ NSLog(@"shouldReloadTableForSearchString: %@", searchString); if ((controller.searchBar.selectedScopeButtonIndex != 0) || // 第一个search条件 (searchString && [searchString length])) { [self maybeBeginSearch]; return NO; } else { self.currentResult = nil; return YES; }}- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption{ NSLog(@"shouldReloadTableforSearchScope: %d", searchOption); if ((searchOption != 0) || (controller.searchBar.text && [controller.searchBar.text length])) { [self maybeBeginSearch]; return NO; } else { self.currentResult = nil; return YES; }}- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView{ // make the activity indicator a sibling of the tableView, so that it can // be displayed on top of it [[tableView superview] addSubview:_activityView];}- (void)maybeBeginSearch{ // cancel any existing timer if (_searchTimer) { NSLog(@"Cancelling existing timer"); [_searchTimer invalidate]; [_searchTimer release]; } // 创建一个timer _searchTimer = [[NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(beginTimerSearch:) userInfo:nil repeats:NO] retain]; }- (void)beginTimerSearch:(NSTimer*)timer { if (timer == _searchTimer) { [_searchTimer invalidate]; [_searchTimer release]; _searchTimer = nil; [self beginSearch]; }}- (void)beginSearch{ NSLog(@"Begin search for %@ with scope %d", self.searchDisplayController.searchBar.text, self.searchDisplayController.searchBar.selectedScopeButtonIndex); // in case one is running already [self.currentRequest cancel]; self.currentRequest = nil; NSInteger scopeIndex = self.searchDisplayController.searchBar.selectedScopeButtonIndex; if (scopeIndex == 0) { NSString* searchString = self.searchDisplayController.searchBar.text; if (searchString && [searchString length]) { _activityView.hidden = NO; if ([searchString length]>5 && ![searchString hasSuffix:@"*"]) searchString = [NSString stringWithFormat:@"%@*", searchString]; self.currentRequest = [[FreebaseSession session] search:searchString name:@"suggest" delegate:self didFinishSelector:@selector(searchFinished:) options:[NSDictionary dictionaryWithObjectsAndKeys: @"/common/topic", @"type", nil]]; } else NSLog(@"No search string: %@", searchString); } else { [self beginGeosearch]; }}- (void)beginGeosearch { NSLog(@"beginGeosearch"); _activityLabel.text = @"Locating..."; _activityView.hidden = NO; // this is what I want to do: // self.searchDisplayController.searchResultsTableView.hidden = NO; // this is moronic, but it makes the table display :( NSString* searchString; if (![self.searchDisplayController.searchBar.text length]) self.searchDisplayController.searchBar.text = @" "; else searchString = self.searchDisplayController.searchBar.text; if (!_awaitingLocation) { NSLog(@"Awaiting location, so queing up a search"); _awaitingLocationForSearch = YES; _awaitingLocation = YES; [_locationManager startUpdatingLocation]; } else if (!_currentLocation) { NSLog(@"Not awaiting, but still missing _currentLocation"); // we're awaiting a location, but haven't yet started searching _awaitingLocationForSearch = YES; } else { NSLog(@"Kicking off a geosearch..."); _activityLabel.text = @"Loading..."; _awaitingLocationForSearch = NO; // ok, we have a location, lets search! CLLocationDegrees latitude = _currentLocation.coordinate.latitude; CLLocationDegrees longtitude = _currentLocation.coordinate.longitude; NSDictionary* geoJsonLocation = [NSDictionary dictionaryWithObjectsAndKeys: @"Point", @"type", [NSArray arrayWithObjects: [NSNumber numberWithDouble:longtitude], [NSNumber numberWithDouble:latitude], nil], @"coordinates", nil]; NSString* locationString = [geoJsonLocation JSONRepresentation]; NSArray *mql_output = [NSArray arrayWithObject: [NSDictionary dictionaryWithObjectsAndKeys: [NSNull null], @"id", [NSNull null], @"name", [NSArray arrayWithObject: [NSDictionary dictionaryWithObjectsAndKeys: [NSNull null], @"id", [NSNull null], @"name", [NSNumber numberWithBool:YES], @"optional", nil]], @"type", nil]]; NSString *mql_output_string = [[mql_output JSONRepresentation] retain]; //[{"type": {"optional": "forbidden", // "id|=": ["/location/country", "/location/us_state", "/location/continent", "/location/us_county"]}}] NSString* distance = [NSString stringWithFormat:@"%f", DISTANCES[self.searchDisplayController.searchBar.selectedScopeButtonIndex]]; NSString *searchString = [self.searchDisplayController.searchBar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; if (searchString && [searchString length]) { NSString *geo_filter = [[NSDictionary dictionaryWithObjectsAndKeys: distance, @"within", locationString, @"location", @"relevance", @"order_by", @"/common/topic", @"type", @"point", @"geometry_type", nil] JSONRepresentation]; NSMutableDictionary* options = [NSMutableDictionary dictionaryWithObjectsAndKeys: geo_filter, @"geo_filter", @"/common/topic", @"type", nil]; if (self.mqlFilter) [options setObject:self.mqlFilter forKey:@"mql_filter"]; NSLog(@"Search with geo_filter for %@ using %@", searchString, options); if ([searchString length]>5 && ![searchString hasSuffix:@"*"]) searchString = [NSString stringWithFormat:@"%@*", searchString]; self.currentRequest = [[FreebaseSession session] search:searchString name:@"geo_relevance" delegate:self didFinishSelector:@selector(searchFinished:) options:options]; } else { NSMutableDictionary* options = [NSMutableDictionary dictionaryWithObjectsAndKeys: distance, @"within", @"relevance", @"order_by", mql_output_string, @"mql_output", @"/common/topic", @"type", @"point", @"geometry_type", nil]; if (self.mqlFilter) [options setObject:self.mqlFilter forKey:@"mql_filter"]; NSLog(@"Searching geo-only"); self.currentRequest = [[FreebaseSession session] geosearch:locationString name:@"suggest" delegate:self didFinishSelector:@selector(geoSearchFinished:) options:options]; } [mql_output_string release]; }}- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ self.currentLocation = newLocation; NSLog(@"New location! %@", [newLocation description]); if (_awaitingLocationForSearch) { _awaitingLocationForSearch = NO; [self beginGeosearch]; } else { // ok, we can simply stop at this point - // it means we've gotten a second location marker, // possibly more accurate than before - no sense in // burning the battery. We don't set _awaitingLocation now, // because the one we've got is good enough NSLog(@"Got a second location, that's good enough for now."); [manager stopUpdatingLocation]; }}- (void)searchFinished:(id)result{ NSLog(@"Search complete, %d items", [result count]); self.currentResult = result; _activityView.hidden = YES; [self.searchDisplayController.searchResultsTableView reloadData];}- (void)geoSearchFinished:(NSDictionary*)result{ self.currentResult = [result valueForKeyPath:@"features.properties"]; NSLog(@"Geosearch complete, %d items", [self.currentResult count]); _activityView.hidden = YES; [self.searchDisplayController.searchResultsTableView reloadData];}- (void)errorDidOccur:(id)result name:(NSString*)name{ NSLog(@"oops...search error: %@", result); _activityView.hidden = YES; self.currentResult = [NSArray arrayWithObject: [NSDictionary dictionaryWithObjectsAndKeys: [NSNull null], @"id", [NSArray array], @"type", [NSString stringWithFormat:@"Error: %@", result], @"name", nil]]; [self.searchDisplayController.searchResultsTableView reloadData];}/*- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated];}*/- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self.searchDisplayController setActive:YES animated:YES]; [self.searchDisplayController.searchBar becomeFirstResponder];}/*- (void)viewWillDisappear:(BOOL)animated {[super viewWillDisappear:animated];}*//*- (void)viewDidDisappear:(BOOL)animated {[super viewDidDisappear:animated];}*/
- UISearchBar的属性和showsScopeBar
- UISearchBar的属性和showsScopeBar
- UISearchBar的属性和showsScopeBar
- UISearchBar的属性和showsScopeBar
- UISearchBar的属性和showsScopeBar
- UISearchBar的属性和showsScopeBar
- UISearchBar 的相关属性和delegate
- UISearchBar 的相关属性和delegate
- UISearchBar 的相关属性
- UISearchBar常用的属性方法
- UISearchbar的相关属性,方法的介绍
- UISearchBar(搜索框)的方法属性介绍
- UISearchBar和 UISearchDisplayController的使用
- UISearchBar和 UISearchDisplayController的使用
- UISearchBar 和 UISearchDisplayController的使用
- UISearchBar 和 UISearchDisplayController的使用
- UISearchBar和 UISearchDisplayController的使用
- UISearchBar 和 UISearchDisplayController的使用
- php文件缓存数据
- Google API的全文翻译 asp.net,简单调用实现,源代码
- 笑话一则
- AS3 中string转xml类型
- 用flash制作SWC文件,生成flex自定义组件
- UISearchBar的属性和showsScopeBar
- oracle开启自动日志归档
- temp
- Vim常用命令
- uva 591 Box of Bricks
- SpringMVC的学习笔记
- SD驱动调试
- AS3中通过事件监听传递参数以及动态变量传递的问题
- DataSet,DataTable,DataView