iOS開發UI篇—使用UItableview完成一個簡單的QQ好友列表(一)

iOS開發UI篇—使用UItableview完成一個簡單的QQ好友列表(一)數組

1、項目結構和plist文件app

 

2、實現代碼ide

1.說明:post

主控制器直接繼承UITableViewControllerui

複製代碼

// YYViewController.h
// 02-QQ好友列表(基本數據的加載)
//
// Created by apple on 14-5-31.
// Copyright (c) 2014年 itcase. All rights reserved.
//atom

#import <UIKit/UIKit.h>spa

@interface YYViewController : UITableViewController代理

@endcode

 
  
複製代碼

在storyboard中進行了關聯blog

2.代碼

數據模型部分:

YYQQGroupModel.h文件

複製代碼

//
// YYQQGroupModel.h
// 02-QQ好友列表(基本數據的加載)
//
// Created by apple on 14-5-31.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface YYQQGroupModel : NSObject
/**
* 名稱屬性
*/
@property(nonatomic,copy)NSString *name;
/**
* 是否在線
*/
@property(nonatomic,copy)NSString *online;
/**
* 好友列表
*/
@property(nonatomic,strong)NSArray *friends;

-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype) qqGroupModelWithDict:(NSDictionary *)dict;
@end

複製代碼

YYQQGroupModel.m文件

複製代碼

//
// YYQQGroupModel.m
// 02-QQ好友列表(基本數據的加載)
//
// Created by apple on 14-5-31.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYQQGroupModel.h"
#import "YYFriendsModel.h"

@implementation YYQQGroupModel
-(instancetype)initWithDict:(NSDictionary *)dict
{
if (self=[super init]) {
//將字典轉換爲模型
[self setValuesForKeysWithDictionary:dict];

//定義一個數組來保存轉換後的模型
NSMutableArray *models=[NSMutableArray arrayWithCapacity:self.friends.count];
for (NSDictionary *dict in self.friends) {
YYFriendsModel *friends=[YYFriendsModel friendsWithDict:dict];
[models addObject:friends];
}
_friends=[models copy];
}
return self;
}

+(instancetype)qqGroupModelWithDict:(NSDictionary *)dict
{
return [[self alloc]initWithDict:dict];
}
@end

複製代碼

YYFriendsModel.h文件

複製代碼

//
// YYFriendsModel.h
// 02-QQ好友列表(基本數據的加載)
//
// Created by apple on 14-5-31.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface YYFriendsModel : NSObject
/**
* 每一個好友的名稱
*/
@property(nonatomic,copy)NSString *name;
/**
*每一個好友的頭像
*/
@property(nonatomic,copy)NSString *icon;
/**
* 每一個好友的個性簽名
*/
@property(nonatomic,copy)NSString *intro;
/**
* 該好友是不是vip
*/
@property(nonatomic,assign,getter = isVip)BOOL vip;

-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)friendsWithDict:(NSDictionary *)dict;
@end

 
  
複製代碼

YYFriendsModel.m文件

複製代碼

//
// YYFriendsModel.m
// 02-QQ好友列表(基本數據的加載)
//
// Created by apple on 14-5-31.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYFriendsModel.h"

@implementation YYFriendsModel
-(instancetype)initWithDict:(NSDictionary *)dict
{
if (self=[super init]) {
[self setValuesForKeysWithDictionary:dict];
}
return self;
}

+(instancetype)friendsWithDict:(NSDictionary *)dict
{
return [[self alloc]initWithDict:dict];
}
@end

複製代碼

視圖部分

YYfriendCell.h文件

複製代碼

//
// YYfriendCell.h
// 02-QQ好友列表(基本數據的加載)
//
// Created by apple on 14-5-31.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>
@class YYFriendsModel;
@interface YYfriendCell : UITableViewCell

@property(nonatomic,strong)YYFriendsModel *friends;

+(instancetype)cellWithTableview:(UITableView *)tableView;
@end

 
  
複製代碼

YYfriendCell.m文件

複製代碼

//
// YYfriendCell.m
// 02-QQ好友列表(基本數據的加載)
//
// Created by apple on 14-5-31.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYfriendCell.h"
#import "YYFriendsModel.h"
//私有擴展
@interface YYfriendCell()


@end
@implementation YYfriendCell

+(YYfriendCell *)cellWithTableview:(UITableView *)tableView
{
static NSString *identifier=@"qq";
YYfriendCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
if (cell==nil) {
//這裏使用系統自帶的樣式
cell=[[YYfriendCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
NSLog(@"建立一個cell");
}
return cell;
}

-(void)setFriends:(YYFriendsModel *)friends
{
_friends=friends;
//1.設置頭像
self.imageView.image=[UIImage imageNamed:_friends.icon];
//2.設置暱稱
self.textLabel.text=_friends.name;
//3.設置簡介
self.detailTextLabel.text=_friends.intro;
//判斷是不是會員
/**
* 這裏有個注意點,若是不寫else設置爲黑色,會怎麼樣?
*/
if (_friends.isVip) {
[self.textLabel setTextColor:[UIColor redColor]];
}else
{
[self.textLabel setTextColor:[UIColor blackColor]];
}
}
@end

 
  
複製代碼

主控制器部分

YYViewController.m文件

複製代碼

//
// YYViewController.m
// 02-QQ好友列表(基本數據的加載)
//
// Created by apple on 14-5-31.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import "YYQQGroupModel.h"
#import "YYfriendCell.h"
#import "YYFriendsModel.h"

@interface YYViewController ()
/**
* 用來保存全部的分組數據
*/
@property(nonatomic,strong)NSArray *groupFriends;
@end

@implementation YYViewController
#pragma mark-懶加載
//1.先拿到數據,實現懶加載
-(NSArray *)groupFriends
{
if (_groupFriends==nil) {
NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"friends.plist" ofType:nil];
NSArray *arrayM=[NSArray arrayWithContentsOfFile:fullpath];

NSMutableArray *models=[NSMutableArray arrayWithCapacity:arrayM.count];
for (NSDictionary *dict in arrayM) {
YYQQGroupModel *group=[YYQQGroupModel qqGroupModelWithDict:dict];
[models addObject:group];
}
_groupFriends=[models copy];
}
return _groupFriends;
}

- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.sectionHeaderHeight = 100;
}

#pragma mark- 設置數據源
//返回多少組
//爲何這裏不會智能提示?由於這些方法是uitableview協議裏的,默認並無遵照協議,讓主控制器類繼承uitableviewcontroller後,就已經遵照了
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.groupFriends.count;
}
//每組返回多少行
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//取出對應的組模型
YYQQGroupModel *group=self.groupFriends[section];
//返回對應組中的好友數
return group.friends.count;
}
//每組每行的內容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//1.建立cell
YYfriendCell *cell=[YYfriendCell cellWithTableview:tableView];

//2.設置cell
YYQQGroupModel *group=self.groupFriends[indexPath.section];
YYFriendsModel *friends=group.friends[indexPath.row];
cell.friends=friends;
//3.返回一個cell
return cell;
}


#pragma mark - 代理方法
// 當一個分組標題進入視野的時候就會調用該方法
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
// 1.建立頭部視圖
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor grayColor];
// 2.返回頭部視圖
return view;
}

//設置分組頭部標題的高度
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 44;
}

#pragma mark 隱藏狀態欄
-(BOOL)prefersStatusBarHidden
{
return YES;
}
@end

複製代碼

實現的簡陋效果:

3、注意點

(1)設置頭部視圖的方法

(2)在重寫set方法時,應該考慮到回滾。

相關文章
相關標籤/搜索