UISearchBar 和 UISearchDisplayController的使用

原文地址:http://hi.baidu.com/happywilma0118/item/e6d5730a499bba1b3a53eef8 


UISearchBar继承自UIView、UIResponder、NSObject


  属性:

 autocapitalizationType————自动对输入文本对象进行大小写设置(包含4种类型,但是有时候键盘会屏蔽此属性)

 autocorrectionType————自动对输入文本对象进行纠错。

 backgroundImage————searchbar的背景图片,如果图片不是可伸缩的或者1点宽,则一般被平铺

 barStyle————控件的样式

 delegate————控件的委托,委托要遵从UISearchBarDelegate协议,默认是nil

 keyboardType————输入时,键盘的样式

 placeholder————半透明的提示文字,输入搜索内容消失

 prompt————显示在控件顶部的一行提示文字

 text————控件上面的显示的文字
 showsBookmarkButton————是否在控件的右端显示一个书的按钮(输入文字时消失)
 showsCancelButton————是否显示cancel按钮(默认是显示)
 showsSearchResultsButton————是否在控件的右端显示搜索结果按钮
 searchResultsButtonSelected————搜索结果按钮是否被选中
 tintColor————bar的颜色(具有渐变效果)
 translucent————指定控件是否会有透视效果
 scopeButtonTitles————搜索栏下部的选择栏,数组里面的内容是按钮的标题
 selectedScopeButtonIndex————搜索栏下部的选择栏按钮的个数
 showsScopeBar————控制搜索栏下部的选择栏是否显示出来(需设置为YES 才能使用scopebar)


UISearchBar不执行搜索行为,必须使用delegate,当输入搜索文本、点击button按钮后,代理的方法会完成搜索对应的操作。


1.编辑输入事件:

2.点击按钮事件:

3.Scope按钮事件:


利用UISearchBar的委托事件 textDidChange,当在搜索框中输入完成后,如果输入的文本长度>0,可以调用自己的搜索方法,得到搜索结果,然后再reloadData,刷新一下。如果输入文本长度<0,则需要恢复到原始数据。这个方法可以在边输入搜索文本边显示结果。 如果需要按“search”按钮再搜索,则将上述操作放在searchBarSearchButtonClicked中。


利用UISearchDisplayController可以简化很多操作,也能达到搜索的目的。

属性:

active————是搜索界面可视化,默认为no,可用setActive方法设置.

delegate————委托

searchBar————在searchdisplaycontroller初始化后,searchbar是不可修改的,是readonly属性的.

searchContentController————管理搜索内容的试图控制器,一般是一个UITableViewController的实例,意思是针对一个UITableView的内容进行搜索

searchResultsDataSource————搜索结果的数据源

searchResultsDelegate————搜索结果的委托

searchResultsTableView————搜索结果要展示在哪个tableview中(read-only);

searchResultsTitle————搜索结果视图的title


初始化一个searchDisplayController:


        UISearchBar * theSearchBar = [[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width-50, 40)] autorelease];

        theSearchBar.placeholder = @"enter province name";

        theSearchBar.autocorrectionType = UITextAutocorrectionTypeNo;

        theSearchBar.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;  

        theSearchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"All",@"A",@"B",@"C",@"D" ,nil];

        theSearchBar.showsScopeBar = YES;

        theSearchBar.keyboardType = UIKeyboardTypeNamePhonePad;

        theSearchBar.showsBookmarkButton = YES;

        

        tableView.tableHeaderView = theSearchBar;  //将searchBar添加到tableView的头,注意滚动出屏幕后,搜索框也不在了,只出现在首页

        

      UISearchDisplayController * searchdispalyCtrl = [[UISearchDisplayController  alloc] initWithSearchBar:theSearchBar contentsController:self];

        searchdispalyCtrl.active = NO;

        searchdispalyCtrl.delegate = self;

        searchdispalyCtrl.searchResultsDelegate=self;

        searchdispalyCtrl.searchResultsDataSource = self;


使用UISearchDisplayDelegate的委托方法进行搜索操作:

1.搜索状态改变:

2.装载和卸载tableview: 3.显示和隐藏tableview:
4.搜索条件改变时响应:


searchDisplayController自身有一个searchResultsTableView,所以在执行操作的时候首先要判断是否是搜索结果的tableView,如果是显示的就是搜索结果的数据,如果不是,是TableView自身的view,则需要显示原始数据。

  if(tableView == self.searchDisplayController.searchResultsTableView)

    {

        arr = [self.filterContent valueForKey:key]; //搜索结果

    }

    else 

    {

        arr = [self.localresource valueForKey:key];  //原始数据

    }


这样就不需要每次都realoadData了。


下文地址:http://blog.csdn.net/uxyheaven/article/details/7881207 

之前比較少用UISearchBar 和 UISearchDisplayController,最近閱讀了一些有關資料,簡單做個筆記:

1、UISearchBar 和 UISearchDisplayController 在IB中是可以直接使用的,UISearchBar如果不指定delegate及執行相關的方法,那麼與一個TextField類似。加入一個UISearchDisplayController,它會附帶了一個UISearchBar,參考UISearchDisplayController Reference會發現,它其實還有一個searchResultTableView,用於顯示搜尋到的結果。所以,如果要使用UISearchDisplayController時,記得要設定TableView的兩個delegate。

2、以下例子使用代碼創建UISearchBar 和 UISearchDisplayController,注意UISearchDisplayController的創建使用了以下的方法:

- (id)initWithSearchBar:(UISearchBar *)searchBar contentsController:(UIViewController *)viewController;


首先要在主ViewController中加入

    <UISearchBarDelegate,UISearchDisplayDelegate,UITableViewDelegate,UITableViewDataSource>

並宣告了兩個物件:mySearchBar和 mySearchDisplayController,然後在.m文件中加入如下代碼:

mySearchBar = [[UISearchBar allocinit];

//可以加入搜索範圍選項scope

    [mySearchBar setScopeButtonTitles:[NSArray arrayWithObjects:@"First",@"Last",nil]];

    mySearchBar.delegate = self;

    [mySearchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone];

    [mySearchBar sizeToFit];

//將UISearchBar加入View中,本例加入到一個TableView中,作為其HeadView

    //[self.view addSubview:mySearchBar];

    self.myTableView.tableHeaderView = mySearchBar;

//本例調整了TableView的大小和位置

    self.myTableView.frame = CGRectMake(6040260self.myTableView.frame.size.height);

    

    mySearchDisplayController = [[UISearchDisplayController allocinitWithSearchBar:mySearchBarcontentsController:self];

    //以下一句代碼有點令人困惑,試過取消這句代碼,仍能正常運行

    [self setMySearchDisplayController:mySearchDisplayController];

[mySearchDisplayController setDelegate:self];

[mySearchDisplayController setSearchResultsDataSource:self];

    [mySearchDisplayController setSearchResultsDelegate:self];


3、以下加入UISearchBar 和 UISearchDisplayController 的一些delegate作為示範:

#pragma mark UISearchBar and UISearchDisplayController Delegate Methods

-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar{

//準備搜尋前,把上面調整的TableView調整回全屏幕的狀態,如果要產生動畫效果,要另外執行animation代碼

    self.myTableView.frame = CGRectMake(00320self.myTableView.frame.size.height);

    return YES;

}

-(BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar{

//搜尋結束後,恢復原狀,如果要產生動畫效果,要另外執行animation代碼

    self.myTableView.frame = CGRectMake(6040260self.myTableView.frame.size.height);

    return YES;

}


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller

shouldReloadTableForSearchString:(NSString *)searchString

{

//一旦SearchBar輸入內容有變化,則執行這個方法,詢問要不要重裝searchResultTableView的數據

    [self filterContentForSearchText:searchString scope:

[[self.searchDisplayController.searchBar scopeButtonTitles]

  objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

    // Return YES to cause the search result table view to be reloaded.

    return YES;

}


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller

shouldReloadTableForSearchScope:(NSInteger)searchOption

{

//一旦Scope Button有變化,則執行這個方法,詢問要不要重裝searchResultTableView的數據

    [self filterContentForSearchText:[self.searchDisplayController.searchBar textscope:

[[self.searchDisplayController.searchBar scopeButtonTitles]

  objectAtIndex:searchOption]];

    // Return YES to cause the search result table view to be reloaded.

    return YES;

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值