`
luckliu521
  • 浏览: 258863 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

UISearchBar and UITableView搜索例子

 
阅读更多
UISearchBar and UITableView是我们很常用的组合,在uisearchbar搜索之后,在uitableview显示你搜索后的数据,先看最终效果图如下:



拖入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
  • 大小: 179 KB
分享到:
评论

相关推荐

    IOS iphone UITableView简单例子

    这个“IOS iphone UITableView简单例子”是一个基础的教程,旨在帮助开发者理解如何在iPhone应用中实现UITableView的基本功能。在这个项目中,我们将会看到如何创建两个不同的表视图区域,并且在用户点击某一行时弹...

    IOS中UITableView优化例子

    在iOS开发中,UITableView是构建用户界面的重要组件,特别是在展示大量数据时,如商品列表、新闻摘要等。这个“UITableView的性能优化”示例旨在帮助初学者理解和掌握如何有效地优化UITableView,以提供流畅的用户...

    iphone 关于UITableView的排序,搜索、使用Interface Builder创建等

    实现搜索功能,你可以使用UISearchBar与UITableView配合。当用户在UISearchBar中输入时,实时更新过滤后的数据源,并调用`reloadData()`刷新表格视图。以下是一个简单的例子: ```swift func searchBar(_ searchBar...

    iOS-UISearchBar

    `UISearchBar`通常与`UITableView`或`UICollectionView`结合使用,用于实现搜索功能,为用户提供便捷的数据过滤体验。本文将详细介绍`UISearchBar`的工作原理、常见用法以及如何将其与`UITableView`集成。 **1. ...

    ios-HJSearchUIDemo.zip

    通过分析HJSearchUIDemo项目,开发者可以学习到如何结合UISearchBar和UITableView创建灵活且用户体验良好的搜索界面,同时了解如何处理搜索输入、过滤数据和更新UI。这个示例对于初学者和有经验的iOS开发者来说都是...

    UITableView 带搜索框 查询

    实现 app 中常见的搜索框(UISearchBar)在列表视图中的滚动行为。本代码实现了三种情况,一种是搜索框始终位于列表的顶部,列表的拖动时搜索框都固定不动。第二种是,列表视图刚加载时,搜索框隐藏在视图的顶部,当...

    uitableview json 解析的 一个例子

    这个例子将探讨如何利用`UITableView`结合JSON解析来显示数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也方便机器解析和生成。在iOS应用中,我们经常需要从服务器...

    iOS基础——通过案例学知识之UITableView

    在iOS开发中,UITableView是一个至关重要的组件,它用于展示数据列表,常见的如联系人列表、邮件收件箱等。这个“iOS基础——通过案例学知识之UITableView”主题将引导我们深入理解如何有效地使用UITableView来构建...

    iphone UITableView详解 带实例 例子

    ### IPhone之UITableView详解 #### 一、前言 UITableView 是 iOS 开发中非常重要的一个控件,用于显示数据列表。相比于 UIButton 等简单控件,UITableView 的使用较为复杂,涉及较多的概念与方法。本文将详细介绍 ...

    iOS UItableView

    总的来说,结合UITableView和UISearchBar,我们可以提供一个强大且直观的搜索功能,让用户能够快速找到所需的信息。在实际开发中,还需要注意性能优化,比如使用异步加载数据,以及在用户输入时避免不必要的数据刷新...

    UITableView使用自定义cell的例子

    本教程将通过一个具体的例子,演示如何在UITableView中使用自定义的UITableViewCell。我们采用的是Model-View-Controller(MVC)架构,这是一种常见的软件设计模式,可以有效分离业务逻辑、数据与用户界面。 首先,...

    UISearchBar搜索AutoComplete下拉列表搜索提示

    在iOS开发中,UISearchBar是用户界面中一个非常重要的组件,它用于实现搜索功能,让用户可以方便快捷地输入关键词进行查询。UISearchBar不仅提供基本的文本输入,还常常结合AutoComplete(自动完成)功能,来提升...

    ios UISearchDisplayController 实现 UITableView 搜索功能 - LeslieFang -

    在iOS开发中,UISearchDisplayController是用于实现UITableView搜索功能的关键组件。这个控制器提供了一种简单的方法来在UITableView中添加一个可搜索的界面,让用户能够快速查找并筛选列表中的数据。下面将详细介绍...

    Swift UITableView and protocol 学习使用

    在Swift编程语言中,UITableView是iOS应用开发中最常用的控件之一,用于展示列表或表格数据。这个教程将深入探讨如何使用Swift与UITableView以及协议进行交互,以创建功能丰富的用户界面。我们将关注以下关键知识点...

    UITableView、UITableView基本用法、UITableView详解

    iOS 开发中 UITableView 的使用详解 UITableView 是 iOS 开发中最常用的控件之一,用于显示列表数据。它类似于 Android 中的 ListView,都是用于显示列表数据的控件。在 iOS 开发中,UITableView 是一个非常重要的...

    UITableView

    UITableView是iOS应用开发中不可或缺的一部分,特别是在Swift编程环境中。它是一种用于显示大量数据的视图控件,可以灵活地展示列表或表格形式的信息。在Swift中,UITableView的使用涉及到多个知识点,包括数据源...

    iPhone之UITableView入门

    在iOS开发中,UITableView是应用最广泛的一种控件,它被用来展示列表或者表格数据,类似于Android中的ListView。本教程将带你入门iPhone上的UITableView使用,通过一个简单的示例项目"**MyTableView**"来深入理解其...

    UITableview处理键盘遮挡

    在iOS开发中,`UITableView` 是一个非常常用且强大的组件,用于展示列表数据。然而,在实际应用中,我们经常会遇到一个问题:当用户在`UITableView`中的输入框(如UITextField)中输入时,弹出的键盘可能会遮挡住...

    用 UITableView 进行多选的代码例子

    这篇博客"用UITableView进行多选的代码例子"提供了如何实现UITableView多选功能的具体示例。在iOS应用中,多选功能常常用于批量删除、编辑或标记项目。 首先,为了实现多选,我们需要开启UITableView的多选模式。在...

    UITableView的SectionHeader的复用

    在iOS开发中,UITableView是一种非常重要的视图组件,用于展示数据列表。当表格中的数据分为多个部分(sections)时,每个部分通常会有一个header视图,用来标识该部分的主题。然而,随着数据量的增大,如果对每个...

Global site tag (gtag.js) - Google Analytics