---------------------------------------------------------------------------------------------------------------------------
2015.8.19 更新
考虑到还会有很多童鞋会看到该Blog,在此做一个说明,开源中国iOS开源客户端源码已做重构,请下载最新的源码学习(注:本Blog不一定适用与新的代码学习)。
新repo地址:http://git.oschina.net/oschina/iphone-app。
另外,收集了一些其他社区的客户端源码,源码也正在不断更新中,有的也上架appstore。
访问地址:http://duxinfeng.com/2015/07/14/iOS%E5%BC%80%E6%BA%90App%E6%95%B4%E7%90%86/
---------------------------------------------------------------------------------------------------------------------------
开源中国社区团队基于开源项目 GitLab 开发了一款和GitHub一样的在线代码托管平台 Git @ OSC。并且开源客户端的源码在GitHub上不做更新,迁移到Git @OSC上了,欲了解更多请访问Git @ OSC官网http://git.oschina.net
客户端最新源码下载地址:http://git.oschina.net/oschina/iphone-app
回归正题,今天分析的是开源中国iOS客户端搜索功能涉及道一些知识,XML解析和动态加载表视图单元格;
在软件首页右上角有一个搜索按钮,点击进入搜索界面,当搜索的内容很多时我们下拉点击 “下面20项。。。”可以在加载20项,这些数据如何填充到表视图之中?
负责搜索功能的是search下的searchView类,xib控件已经已经做好布局,首先说下SearchView.h文件属性成员代表的作用;
#import <UIKit/UIKit.h>
#import "SearchResult.h"
#import "MBProgressHUD.h"
@interface SearchView : UIViewController<UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate>
{
// 可变数组存放解析的数据
NSMutableArray * results;
// 搜索的时候判断是否正在加载数据
BOOL isLoading;
// 判断数据是否加载完毕
BOOL isLoadOver;
// 记录表视图单元格应该加载数据总条数
int allCount;
}
@property (strong, nonatomic) IBOutlet UISegmentedControl *segmentSearch;
@property (strong, nonatomic) IBOutlet UITableView *tableResult;
@property (strong, nonatomic) IBOutlet UISearchBar *_searchBar;
//根据搜索关键字在不同分类中进行搜索
- (IBAction)segementChanged:(id)sender;
//搜索
-(void)doSearch;
//清空上次搜索记录
-(void)clear;
OK现在挺进SearchView.m文件,如果搜索的内容不为空开始 dosearch方法,dosearch方法中使用了ASNetwork类库封装的post网络请求方法(关于AFNetwork post get请求方法请看http://blog.csdn.net/duxinfeng2010/article/details/8620901)
- (void)postPath:(NSString *)path
parameters:(NSDictionary *)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
post请求无法获取它的url,但是可以取出请求成功返回来的数据,比如搜索iOS 返回的xml
<?xml version="1.0" encoding="UTF-8"?>
<oschina>
<pagesize>20</pagesize>
<results>