`
zl4393753
  • 浏览: 340167 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Building a SearchView with UISearchBar and UITableView

 
阅读更多
Building a SearchView with UISearchBar and UITableView

Original Article Address: http://jduff.github.com/2010/03/01/building-a-searchview-with-uisearchbar-and-uitableview/

SearchViewController.h
//
//  SearchViewController.h
//
#import <UIKit/UIKit.h>

@interface SearchViewController : UIViewController
 <UISearchBarDelegate, UITableViewDataSource> {
	NSMutableArray *tableData;
	
	UIView *disableViewOverlay;
	
	UITableView *theTableView;
	UISearchBar *theSearchBar;
}

@property(retain) NSMutableArray *tableData;
@property(retain) UIView *disableViewOverlay;

@property (nonatomic, retain) IBOutlet UITableView *theTableView;
@property (nonatomic, retain) IBOutlet UISearchBar *theSearchBar;

- (void)searchBar:(UISearchBar *)searchBar activate:(BOOL) active;

@end


SearchViewController.m
//
//  SearchViewController.m
//
#import "SearchViewController.h"

@implementation SearchViewController
@synthesize tableData;
@synthesize disableViewOverlay;
@synthesize theSearchBar;
@synthesize theTableView;


// Initialize tableData and disabledViewOverlay 
- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableData =[[NSMutableArray alloc]init];
    self.disableViewOverlay = [[UIView alloc]
     initWithFrame:CGRectMake(0.0f,44.0f,320.0f,416.0f)];
    self.disableViewOverlay.backgroundColor=[UIColor blackColor];
    self.disableViewOverlay.alpha = 0;
}

// Since this view is only for searching give the UISearchBar 
// focus right away
- (void)viewDidAppear:(BOOL)animated {
    [self.theSearchBar becomeFirstResponder];
    [super viewDidAppear:animated];
}

#pragma mark -
#pragma mark UISearchBarDelegate Methods

- (void)searchBar:(UISearchBar *)searchBar
    textDidChange:(NSString *)searchText {
  // We don't want to do anything until the user clicks 
  // the 'Search' button.
  // If you wanted to display results as the user types 
  // you would do that here.
}

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
    // searchBarTextDidBeginEditing is called whenever 
    // focus is given to the UISearchBar
    // call our activate method so that we can do some 
    // additional things when the UISearchBar shows.
    [self searchBar:searchBar activate:YES];
}

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
    // searchBarTextDidEndEditing is fired whenever the 
    // UISearchBar loses focus
    // We don't need to do anything here.
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    // Clear the search text
    // Deactivate the UISearchBar
    searchBar.text=@"";
    [self searchBar:searchBar activate:NO];
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    // Do the search and show the results in tableview
    // Deactivate the UISearchBar
	
    // You'll probably want to do this on another thread
    // SomeService is just a dummy class representing some 
    // api that you are using to do the search
    NSArray *results = [SomeService doSearch:searchBar.text];
	
    [self searchBar:searchBar activate:NO];
	
    [self.tableData removeAllObjects];
    [self.tableData addObjectsFromArray:results];
    [self.theTableView reloadData];
}

// We call this when we want to activate/deactivate the UISearchBar
// Depending on active (YES/NO) we disable/enable selection and 
// scrolling on the UITableView
// Show/Hide the UISearchBar Cancel button
// Fade the screen In/Out with the disableViewOverlay and 
// simple Animations
- (void)searchBar:(UISearchBar *)searchBar activate:(BOOL) active{	
    self.theTableView.allowsSelection = !active;
    self.theTableView.scrollEnabled = !active;
    if (!active) {
        [disableViewOverlay removeFromSuperview];
        [searchBar resignFirstResponder];
    } else {
        self.disableViewOverlay.alpha = 0;
        [self.view addSubview:self.disableViewOverlay];
		
        [UIView beginAnimations:@"FadeIn" context:nil];
        [UIView setAnimationDuration:0.5];
        self.disableViewOverlay.alpha = 0.6;
        [UIView commitAnimations];
		
        // probably not needed if you have a details view since you 
        // will go there on selection
        NSIndexPath *selected = [self.theTableView 
            indexPathForSelectedRow];
        if (selected) {
            [self.theTableView deselectRowAtIndexPath:selected 
                animated:NO];
        }
    }
    [searchBar setShowsCancelButton:active animated:YES];
}


#pragma mark -
#pragma mark UITableViewDataSource Methods

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section {
    return [tableData count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"SearchResult";
    UITableViewCell *cell = [tableView
     dequeueReusableCellWithIdentifier:MyIdentifier];
	
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] 
         initWithStyle:UITableViewCellStyleDefault 
         reuseIdentifier:MyIdentifier] autorelease];
    }
	
    id *data = [self.tableData objectAtIndex:indexPath.row];
    cell.textLabel.text = data.name;
    return cell;
}

#pragma mark -
#pragma mark Memory Management Methods

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];	
    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc {
    [theTableView release], theTableView = nil;
    [theSearchBar release], theSearchBar = nil;
    [tableData dealloc];
    [disableViewOverlay dealloc];
    [super dealloc];
}

@end
分享到:
评论

相关推荐

    Android代码-可自定义SearchView和动画的Toolbar扩展

    This allow you to use with a custom SearchView with animation and more. This library should work on API 14. Usage You can use this library like a Toolbar, you just need to do the following: Add '...

    SearchView

    在Android开发中,`SearchView`是一个非常重要的组件,它为用户提供了一个可扩展的搜索界面,通常用于在应用内进行内容查找。`SearchView`继承自`LinearLayout`,并集成了`EditText`和取消按钮,使得用户可以方便地...

    searchView

    在Android开发中,`SearchView` 是一个非常重要的组件,常用于实现搜索功能,它提供了用户友好的界面,使得用户可以方便地输入查询关键词来过滤数据。本篇将深入探讨`SearchView`与`ListView`的集成,以及如何实现...

    Android搜索框(SearchView)的功能和用法详解

    Android搜索框(SearchView)的功能和用法详解 Android搜索框(SearchView)是Android系统中的一种搜索组件,它允许用户在文本框中输入文字,并通过监听器取得用户的输入,当用户点击搜索时,监听器执行实际的搜索...

    android之searchview

    在Android开发中,`SearchView` 是一个非常重要的组件,它提供了一个用户友好的界面,让用户可以在应用中进行搜索操作。`SearchView`通常与`ActionBar`或`Toolbar`结合使用,增强了应用的搜索功能,使得用户能快速...

    searchView的简单实现

    在Android开发中,`SearchView`是一个非常常用的组件,它为用户提供了一个搜索界面,可以方便地在应用中进行内容检索。本篇文章将详细介绍如何在Android中实现`SearchView`的基本功能,并结合`ListView`展示搜索结果...

    Android SearchView详解源码

    在Android开发中,`SearchView`是一个非常重要的组件,它为用户提供了一个内置的搜索框,可以集成到App的工具栏(ToolBar)中,提供高级的搜索功能。本篇将深入探讨`SearchView`的源码解析,以及如何实现其基本应用...

    仿qq搜索效果SearchView

    在提供的文件列表中,我们看到有三个名为"SearchView"的文件(SearchView3、SearchView、SearchView2),这些很可能是项目中不同版本或不同实现方式的SearchView源代码。通过分析和学习这些代码,开发者可以深入理解...

    SearchView小demo

    在Android开发中,`SearchView`是一个非常重要的组件,它为用户提供了一个搜索界面,可以方便地集成到应用的导航栏或者菜单中,用于实现各种搜索功能。本篇将详细讲解如何利用`SearchView`实现一个小型的搜索示例,...

    Android SearchView和ListView结合使用Demo

    在Android开发中,`SearchView`和`ListView`的结合使用是常见的功能需求,它能够为用户提供方便的搜索和浏览大量数据的能力。本教程将基于提供的`Android SearchView和ListView结合使用Demo`来深入探讨这一主题。 ...

    actionBar+searchView+listView实现搜索

    在Android应用开发中,`ActionBar`、`SearchView`和`ListView`是常见的组件,用于构建用户友好的交互界面。本教程将详细讲解如何利用这些组件实现搜索功能,包括两个不同的示例:`ActionBarDemo`和`SearchViewDemo`...

    android 搜索功能 SearchView+RecyclerView实现 搜索结果高亮显示

    `SearchView`和`RecyclerView`是Android SDK中的两个关键组件,可以协同工作以实现强大的搜索功能并展示搜索结果。本项目"android 搜索功能 SearchView+RecyclerView实现 搜索结果高亮显示"就是这样一个示例,它演示...

    SearchView的应用

    在Android开发中,`SearchView` 是一个非常重要的组件,常用于实现应用内的搜索功能,让用户能够方便快捷地查找所需内容。本篇文章将详细讲解`SearchView`的应用,并结合`SDK`中的`SearchableDictionary`例子进行...

    Android代码-SearchView源码解析

    SearchView源码解析 SearchView是一个搜索框控件,样式也挺好看的。这次解析主要围绕android.support.v7.widget包下的SearchView(API &gt;= 7),android.widget.SearchView支持API &gt;= 11, 另外有个android.support.v4...

    一个简单的基于 Material Design 的 Android SearchView_Kotlin

    **Android SearchView 使用详解——基于 Material Design 的 Kotlin 实现** 在 Android 应用开发中,SearchView 是一个非常重要的组件,它提供了用户友好的搜索功能,可以方便地集成到应用的导航栏或工具栏中。本...

    SearchView使用实例

    在Android开发中,`SearchView` 是一个非常重要的组件,常用于实现应用内的搜索功能,让用户能够方便地在大量数据中查找所需信息。本实例将深入探讨如何在Android项目中集成并有效利用`SearchView`。 `SearchView` ...

    自定义searchView

    在Android应用开发中,自定义`SearchView`是一项常见的任务,尤其当应用程序处理大量数据时,提供一个高效的搜索功能能够显著提升用户体验。`SearchView`是Android SDK中的一个组件,通常用于实现应用内的搜索功能,...

    SearchView搜索过滤

    在Android开发中,`SearchView` 是一个非常重要的组件,常用于实现应用内的搜索功能,让用户能够方便地在大量数据中查找所需信息。本篇将深入讲解`SearchView`的使用及其与`ListView`结合进行搜索过滤的实现方法。 ...

    SearchView+ListView 数据过滤

    在Android开发中,`SearchView`和`ListView`是两个常用的组件,它们分别用于提供用户友好的搜索功能和展示大量列表数据。`Filterable`接口则使得`ListView`能够根据用户的搜索条件动态过滤数据,从而实时更新显示...

    Node.js-SearchView基于DialogFragment的搜索视图

    在Android开发中,SearchView是用于实现用户友好的搜索功能的组件,通常集成在Action Bar或Toolbar中。然而,为了提供更加灵活的交互体验,我们可以将SearchView与DialogFragment结合,创建一个独立的搜索对话框。`...

Global site tag (gtag.js) - Google Analytics