- 浏览: 10754 次
文章分类
最新评论
-
sgq0085:
这种公司名一听就不想去
创业维艰之公司名 -
漫步邃思:
主营业务是什么呢,感觉名字有点怪
创业维艰之公司名 -
q315506754:
写的这么好 那个踩是谁干的
程序猿学产品:如何开始一个伟大的idea -
james219:
写的很好,你会成功
程序猿学产品:如何开始一个伟大的idea
类QQ,微信,联系人列表搜索UISearchBar使用
下面再贴一下自己的关键代码
1,设置代理,UISearchBarDelegate,UISearchDisplayDelegate
<span style="font-size:12px;">@interface FKRSearchBarTableViewController () <UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchDisplayDelegate> { NSMutableArray * resultItems; NSMutableArray * suggestItems; } @property(nonatomic, strong, readwrite) UISearchBar *searchBar; @property(nonatomic, strong) UISearchDisplayController *strongSearchDisplayController;</span>
2,ViewDidLoad方法 初始化
- (void)viewDidLoad { [super viewDidLoad]; resultItems = [[NSMutableArray alloc] initWithCapacity:20]; suggestItems = [[NSMutableArray alloc] initWithCapacity:20]; //1,初始化searchbar self.searchBar = [[UISearchBar alloc] init]; self.searchBar.placeholder = @"Search"; self.searchBar.delegate = self; [_searchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone]; //默认是句子首字母大写,这里设置为none [self.searchBar sizeToFit]; //2,初始化tableview,并将searbar设置为tableview的tableHeaderView self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds]; self.tableView.dataSource = self; self.tableView.delegate = self; self.tableView.tableHeaderView=_searchBar; [self.view addSubview:_tableView]; //3.初始化SearchDisplayController self.strongSearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self]; self.searchDisplayController.searchResultsDataSource = self; self.searchDisplayController.searchResultsDelegate = self; self.searchDisplayController.delegate = self; //4.设置搜索栏默认数据,即全部联系人 [self fetchItems]; }
3,代理方法设置
(1)代理方法1:当search文本内容改变的时候调用
业务处理如下:当文本内容长度大于零,根据文本内容搜索,否则查询所有。代码如下:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { if ([self.searchBar.text length] > 0) { [self doSearch]; } else { [self fetchMembers]; [self setionWithFriends]; [self.tableView reloadData]; } }
(2)代理方法2:点击取消按钮时候调用
业务如下:点击取消按钮的时候,重置响应者,清空搜索文本内容,tableview加载全部联系人,代码如下:
<span style="font-size:12px;">- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { //重置响应者 [self.searchBar resignFirstResponder]; // 清空搜索文本 self.searchBar.text = @""; // 隐藏取消按钮 self.searchBar.showsCancelButton = NO; // 加载默认数据 [self fetchMembers]; [self setionWithFriends]; [self.tableView reloadData]; }</span>
(3)代理方法3:文本开始编辑的时候调用,显示取消按钮,代码如下:
<span style="font-size:12px;">- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { self.searchBar.showsCancelButton = YES; }</span>
4,tableview最常用的三个代理方法的设置
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
注:判断tableview 是否是searchDisplayController的searchResultsTableView
<span style="font-size:12px;"> if(tableView == self.searchDisplayController.searchResultsTableView){ }else{ }</span>
最后给大家看下又长又臭的代码,我已经不忍直视了。
<span style="font-size:14px;">- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { if(tableView == self.searchDisplayController.searchResultsTableView){ return 1; }else{ if (self.showSectionIndexes) { return self.sections.count; } else { return 1; } } } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { //if (section<1)return 1; if(tableView == self.searchDisplayController.searchResultsTableView) { return [suggestItems count]; }else{ //分组排序 if (self.showSectionIndexes) { return [[self.sections objectAtIndex:section] count]; //显示全部 } else { return self.friendArray.count; } } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kFKRSearchBarTableViewControllerDefaultTableViewCellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kFKRSearchBarTableViewControllerDefaultTableViewCellIdentifier]; } if(tableView == self.searchDisplayController.searchResultsTableView){ for(UIView * elem in [cell.contentView subviews]) { if([elem isKindOfClass:[BDSuggestLabel class]]) { NSLog(@"remove"); [elem removeFromSuperview]; } } BDSuggestLabel * richTextLabel = [[BDSuggestLabel alloc] initWithFrame:CGRectMake(10, 10, 300, 25)]; richTextLabel.text = [suggestItems objectAtIndex:indexPath.row]; richTextLabel.keyWord = self.searchBar.text;//设置当前搜索的关键字 richTextLabel.backgroundColor = [UIColor clearColor]; richTextLabel.font = [UIFont systemFontOfSize:17.0f]; richTextLabel.textColor = [UIColor grayColor]; [cell.contentView addSubview:richTextLabel]; } else { //显示分组 if (self.showSectionIndexes) { if (indexPath.section<1) { //cell.textLabel.text=@"xxoo"; AddressFirstCell *cell=[[[NSBundle mainBundle]loadNibNamed:@"AddressFirstCell" owner:self options:nil]lastObject]; cell.blok=^(int button){ switch (button) { case 0: [self.navigationController pushViewController:self.colleague animated:YES]; break; case 1: [self.navigationController pushViewController:self.dept animated:YES]; break; case 2: [self.navigationController pushViewController:self.common animated:YES]; break; default: break; } }; return cell; }else{ //cell.textLabel.text = [[self.sections objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; JAMember *member= [[self.sections objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; cell.textLabel.text=member.name; DLog(@"%@",cell.textLabel.text); if([member.memberDetail.image length]>0){ NSData * imageData = [NSData dataWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:member.memberDetail.image]]; cell.imageView.image=[UIImage imageWithData:imageData]; } } //显示全部 } else { cell.textLabel.text = [self.friendArray objectAtIndex:indexPath.row]; } } return cell; }</span>
第一次写博客,目的是记录自己的学习经历,大神请轻喷,又原意一起交流的可以加个好友,后续我会把代码再整理下,再贴出源代码
下面再贴一下自己的关键代码
1,设置代理,UISearchBarDelegate,UISearchDisplayDelegate
<span style="font-size:12px;">@interface FKRSearchBarTableViewController () <UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchDisplayDelegate> { NSMutableArray * resultItems; NSMutableArray * suggestItems; } @property(nonatomic, strong, readwrite) UISearchBar *searchBar; @property(nonatomic, strong) UISearchDisplayController *strongSearchDisplayController;</span>
2,ViewDidLoad方法 初始化
- (void)viewDidLoad { [super viewDidLoad]; resultItems = [[NSMutableArray alloc] initWithCapacity:20]; suggestItems = [[NSMutableArray alloc] initWithCapacity:20]; //1,初始化searchbar self.searchBar = [[UISearchBar alloc] init]; self.searchBar.placeholder = @"Search"; self.searchBar.delegate = self; [_searchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone]; //默认是句子首字母大写,这里设置为none [self.searchBar sizeToFit]; //2,初始化tableview,并将searbar设置为tableview的tableHeaderView self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds]; self.tableView.dataSource = self; self.tableView.delegate = self; self.tableView.tableHeaderView=_searchBar; [self.view addSubview:_tableView]; //3.初始化SearchDisplayController self.strongSearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self]; self.searchDisplayController.searchResultsDataSource = self; self.searchDisplayController.searchResultsDelegate = self; self.searchDisplayController.delegate = self; //4.设置搜索栏默认数据,即全部联系人 [self fetchItems]; }
3,代理方法设置
(1)代理方法1:当search文本内容改变的时候调用
业务处理如下:当文本内容长度大于零,根据文本内容搜索,否则查询所有。代码如下:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { if ([self.searchBar.text length] > 0) { [self doSearch]; } else { [self fetchMembers]; [self setionWithFriends]; [self.tableView reloadData]; } }
(2)代理方法2:点击取消按钮时候调用
业务如下:点击取消按钮的时候,重置响应者,清空搜索文本内容,tableview加载全部联系人,代码如下:
<span style="font-size:12px;">- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { //重置响应者 [self.searchBar resignFirstResponder]; // 清空搜索文本 self.searchBar.text = @""; // 隐藏取消按钮 self.searchBar.showsCancelButton = NO; // 加载默认数据 [self fetchMembers]; [self setionWithFriends]; [self.tableView reloadData]; }</span>
(3)代理方法3:文本开始编辑的时候调用,显示取消按钮,代码如下:
<span style="font-size:12px;">- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { self.searchBar.showsCancelButton = YES; }</span>
4,tableview最常用的三个代理方法的设置
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
注:判断tableview 是否是searchDisplayController的searchResultsTableView
<span style="font-size:12px;"> if(tableView == self.searchDisplayController.searchResultsTableView){ }else{ }</span>
最后给大家看下又长又臭的代码,我已经不忍直视了。
<span style="font-size:14px;">- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { if(tableView == self.searchDisplayController.searchResultsTableView){ return 1; }else{ if (self.showSectionIndexes) { return self.sections.count; } else { return 1; } } } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { //if (section<1)return 1; if(tableView == self.searchDisplayController.searchResultsTableView) { return [suggestItems count]; }else{ //分组排序 if (self.showSectionIndexes) { return [[self.sections objectAtIndex:section] count]; //显示全部 } else { return self.friendArray.count; } } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kFKRSearchBarTableViewControllerDefaultTableViewCellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kFKRSearchBarTableViewControllerDefaultTableViewCellIdentifier]; } if(tableView == self.searchDisplayController.searchResultsTableView){ for(UIView * elem in [cell.contentView subviews]) { if([elem isKindOfClass:[BDSuggestLabel class]]) { NSLog(@"remove"); [elem removeFromSuperview]; } } BDSuggestLabel * richTextLabel = [[BDSuggestLabel alloc] initWithFrame:CGRectMake(10, 10, 300, 25)]; richTextLabel.text = [suggestItems objectAtIndex:indexPath.row]; richTextLabel.keyWord = self.searchBar.text;//设置当前搜索的关键字 richTextLabel.backgroundColor = [UIColor clearColor]; richTextLabel.font = [UIFont systemFontOfSize:17.0f]; richTextLabel.textColor = [UIColor grayColor]; [cell.contentView addSubview:richTextLabel]; } else { //显示分组 if (self.showSectionIndexes) { if (indexPath.section<1) { //cell.textLabel.text=@"xxoo"; AddressFirstCell *cell=[[[NSBundle mainBundle]loadNibNamed:@"AddressFirstCell" owner:self options:nil]lastObject]; cell.blok=^(int button){ switch (button) { case 0: [self.navigationController pushViewController:self.colleague animated:YES]; break; case 1: [self.navigationController pushViewController:self.dept animated:YES]; break; case 2: [self.navigationController pushViewController:self.common animated:YES]; break; default: break; } }; return cell; }else{ //cell.textLabel.text = [[self.sections objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; JAMember *member= [[self.sections objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; cell.textLabel.text=member.name; DLog(@"%@",cell.textLabel.text); if([member.memberDetail.image length]>0){ NSData * imageData = [NSData dataWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:member.memberDetail.image]]; cell.imageView.image=[UIImage imageWithData:imageData]; } } //显示全部 } else { cell.textLabel.text = [self.friendArray objectAtIndex:indexPath.row]; } } return cell; }</span>
第一次写博客,目的是记录自己的学习经历,大神请轻喷,又原意一起交流的可以加个好友,后续我会把代码再整理下,再贴出源代码
相关推荐
4. **数据展示**:联系人列表通常使用列表视图(如iOS的UITableView或Android的RecyclerView)来展示。每个联系人项需要包含姓名、头像、以及可能的其他信息(如昵称、状态等)。为了提高性能,列表视图的复用机制...
在微信应用中,当我们查看联系人列表时,会发现它具有很好的可滚动性、分组和搜索功能,这种设计模式被称为“类似微信联系人的ListView”。同样,城市列表的ListView也是类似的,主要目的是高效地展示大量结构化的...
源码可能使用了微信小程序或QQ小程序所支持的开发框架,如微信的微信开发者工具所采用的WXML和WXSS语言,以及JavaScript进行业务逻辑处理。 【标签】: 同样是"仿QQ微信小程序源码.zip",标签进一步确认了压缩包内容...
QQ微信现在可以说是每部智能机安装必备软件了!已经突破2亿用户,覆盖iOS,Andriod、Windows Phone、Symbain、黑莓等...黄天不负有心人哪~终于找到一款无需任何虚拟机就可以安装使用的QQ微信电脑客户端了,分享给大家。
用QT QListView写的仿微信好友列表,列表仿微信好友列表(头像+上下双行数据),还有单击获取信息的功能;效果图在 https://blog.csdn.net/u014385680/article/details/104963956
批处理删除QQ和微信聊天记录 强制关闭QQ、微信并删除QQ、微信所有聊天记录和接收的文件 批处理删除QQ和微信聊天记录
【压缩包子文件的文件名称列表】: "基于Android的仿QQ微信聊天系统" 暗示压缩包可能包含以下内容: - 项目源代码:包括Java文件、XML布局文件、资源文件(如图片、音频、字符串资源等) - 项目配置文件:如build....
QQ微信域名防封处理技术源码 微信网址域名强制跳转至浏览器打开 红域名打开访问 1已被拦截的红域名,通过此源码可以实现不提示拦截,直接在微信内打开。 2无需跳转到浏览器,也能打开 3修复打开失败,跳转卡顿的问题...
本文将深入探讨如何使用封装好的PopupWindow类实现QQ、QQ空间以及微信和朋友圈的分享功能。 首先,PopupWindow是Android系统提供的一种轻量级窗口,它可以作为弹出框显示在屏幕上的任意位置。在实现分享功能时,...
6. **UI设计**:遵循Android Material Design指南,提供良好的用户体验,包括聊天界面、联系人列表和消息通知。 7. **数据存储**:本地存储聊天记录,可以利用SQLite数据库或者Android的SharedPreferences来保存用户...
一键删除QQ微信记录文件(多路径).bat
介绍腾讯营销QQ微信版新增加功能,微信营销功能展示
【微信小程序-毕设期末大作业】源码电商类微信小程序 【微信小程序-毕设期末大作业】源码电商类微信小程序【微信小程序-毕设期末大作业】源码电商类微信小程序【微信小程序-毕设期末大作业】源码电商类微信小程序...
本项目“微信小程序-模仿QQ小程序”旨在通过模仿QQ小程序的界面和功能,帮助开发者学习和掌握微信小程序的开发技巧。 首先,我们需要了解微信小程序的基本结构。微信小程序由JSON、WXML、WXSS和JavaScript四部分...
浏览器跳转原理就是,用户微信,QQ内访问提示浏览器打开,非微信QQ访问可直接打开。不会有任何提示,对用户没有任何影响,网址跳转到浏览器打开,也就不会再存在封域名和屏蔽域名的可能。 做营销最怕的就是自己的...
使用方法: 1、上传fanghong目录至网站根目录。 2、将本目录"代码,记得修改!.php"代码全部复制到网站根目录下index.php的开头。 3、复制前请先修改本站名字、链接 替换成 自己的网站名字、链接。 批量替换...
这通常包括输入框、表情选择面板、联系人列表、消息气泡等元素。UI设计应遵循平台的原生设计规范,以确保一致性。 2. **表情库**:QQ和微信都有自己丰富的表情库,包括系统默认的表情和用户自定义的表情。开发者...
在Swift开发中,集成第三方社交平台如QQ和微信,能够为用户提供更加便捷的登录和分享功能,提升用户体验。本文将详细讲解如何根据QQ和微信的官方文档,实现这两个平台的登录与分享功能。 首先,我们需要在Xcode项目...
1. **浏览器内核解析**:微信QQ浏览器可能使用的是自家定制的内核,如X5内核,了解这部分源码可以帮助我们理解它是如何解析和渲染网页内容的。 2. **安全策略实施**:源码中可能包含了防止洪水攻击的算法,比如IP...
在Android应用开发中,集成社交平台的分享功能已经成为一种常见的需求,尤其是QQ和微信作为国内最流行的社交软件,其分享接口被广泛使用。本篇文章将详细介绍如何在Android应用中实现QQ和微信的分享功能。 首先,...