#import
@interface SearchSongVC :UIViewController
@end
//定义cell的标识符
NSStringstatic *reuseIdentifier =@"cell";
//需要用到的协议中的方法,即UICollectionView中的协议。
@interface SearchSongVC ()<UICollectionViewDataSource,UICollectionViewDelegate>
//UI界面引出的接口
@property (weak, nonatomic) IBOutletUITextField *searchContent;
@property (weak, nonatomic) IBOutletUICollectionView *collectionView;
//定义网络的对象,用于获取数据。
@property (nonatomic,strong)FetchDataFromNet *fetchData;
//定义本地中的数组用于存放获取后的数据。
@property (nonatomic,strong)NSArray *getDataArray;
- (void)getData:(NSString *)name page:(NSInteger)pageIndex{
[FetchDataFromNetfetchMusicData:namepage:pageIndex callback:^(NSArray *array,NSInteger page,NSError *error){
if (error) {
NSLog(@"error = %@",error);
}else{
//初始化本地的数组,并重新加载数据。
self.getDataArray = array;
[self.collectionView reloadData];
// NSLog(@"%@",_getDataArray);
}
}];
}
//点击search按钮后调用的方法。
- (IBAction)searchSongs:(UIBarButtonItem *)sender {
if (self.searchContent.text) {
//调用获取数据的方法,key是用户输入的内容。
[self getData:self.searchContent.textpage:1];
}
}
3.实现协议中的方法。 #pragma mark
//section的个数。
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return1;
}
//cell的个数,本地数组的长度。
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return self.getDataArray.count;
}
//初始化cell,但需要在viewDidLoad方法中注册,并说明自己是协议的委托。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
//cell是自定义的对象,
CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
//调用对象方法,初始化数据。(需要在CollectionViewCell.m文件中实现次方法),而参数是getDataArray中的一个musicData的对象,而该对象有trackname,albumname,logoname等属性。
[cell setInfo:self.getDataArray[indexPath.row]];
return cell;
}
- (void)viewDidLoad {
[superviewDidLoad];
//说明自己是协议的委托。
self.collectionView.delegate =self;
self.collectionView.dataSource =self;
//注册。
UINib *cellNib = [UINibnibWithNibName:@"collectionCell"bundle:[NSBundlemainBundle]];
[self.collectionViewregisterNib:cellNibforCellWithReuseIdentifier:reuseIdentifier];
}
//cell的长宽。
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
returnCGSizeMake(self.view.frame.size.width,45);
}
4.在自定义cell中实现数据的初始化。
@property (weak, nonatomic) IBOutletUIImageView *logoImage;
@property (weak, nonatomic) IBOutletUILabel *songName;
@property (weak, nonatomic) IBOutletUILabel *albumName;
//实现共有的api方法。
- (void)setInfo:(MusicData *)musicData{
//初始化数据
self.songName.text = musicData.trackname;
self.albumName.text = musicData.albumname;
//因为加载图片是耗时的操作,所以此处需要线程的异步操作
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
//获取图片的网络地址,并进行加载。
NSURL *imageUrl = [NSURLURLWithString:musicData.logoname];
// NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
// UIImage *image = [UIImage imageWithData:imageData];
// [self setImage:image];
//这里我调用了第三方库UIImageView+WebCache.h下载:点击打开链接 当然在导入库的时候要导完全。
[self.logoImagesd_setImageWithURL:imageUrlplaceholderImage:[UIImageimageNamed:@"surf.jpg"]];
});
}