新浪微博中tableview中头部信息

摘自http://www.cnblogs.com/gcb999/p/3151665.html

新浪微博中tableview中头部信息
#import <UIKit/UIKit.h>
@class User;
@protocol ASIHTTPRequestDelegate;
@interface ProfileHeaderView : UIView <ASIHTTPRequestDelegate>
@property (nonatomic, retain) User *user;
@property (nonatomic, assign) UIViewController *controller;
@end #define kPadding 10 #define kIconWidth 100
#define kIconHeight 100 #define kCountButtonHeight 35
#define kCountSize 12
#define kCountButtonWidth 55 #define kNameSize 15
#define kDescSize 10 #define kBtnFriend 1
#define kBtnFollower 2 #define kGlobalBg [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:1] #import "ProfileHeaderView.h"
#import "User.h"
#import <QuartzCore/QuartzCore.h>
#import "ASIHTTPRequest.h"
#import "FriendController.h"
#import "FollowerController.h" @interface ProfileHeaderView() {
UIImageView *_icon;
UILabel *_name;
UILabel *_desc;
UILabel *_status; UIButton *_friends;
UIButton *_followers;
}
@end @implementation ProfileHeaderView
#pragma mark 监听按钮点击
- (void)btnClick:(UIButton *)btn { FriendshipController *vc = nil; if (btn.tag == kBtnFollower) {
// 粉丝
vc = [[[FollowerController alloc] init] autorelease];
vc.title = [NSString stringWithFormat:@"%@的粉丝", self.user.screenName];
} else {
// 关注
vc = [[[FriendController alloc] init] autorelease];
vc.title = [NSString stringWithFormat:@"%@的关注", self.user.screenName];
} vc.uid = self.user.uid;
[self.controller.navigationController pushViewController:vc animated:YES];
} #pragma mark 返回数目按钮的文字
- (NSString *)countText:(int)count title:(NSString *)title {
NSString *countTitle = nil;
if (count < 10000) {
countTitle = [NSString stringWithFormat:@"%i", count];
} else {
CGFloat countValue = count/10000.0;
countTitle = [NSString stringWithFormat:countValue>=100?@"%.0f万":@"%.1f万", countValue];
} return [NSString stringWithFormat:@"%@\n%@", countTitle, title];
} #pragma mark 创建一个按钮
- (UIButton *)buttonWithSelector:(SEL)selector x:(CGFloat)x y:(CGFloat)y {
UIButton *button = [[[UIButton alloc] initWithFrame:CGRectMake(x, y, kCountButtonWidth, kCountButtonHeight)] autorelease];
button.titleLabel.font = [UIFont systemFontOfSize:kCountSize];
[button addTarget:self action:selector forControlEvents:UIControlEventTouchUpInside];
button.titleLabel.numberOfLines = 0;
button.titleLabel.textAlignment = NSTextAlignmentCenter;
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage resizeImage:@"skin_cell_background.png"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage resizeImage:@"skin_cell_background_highlighted.png"] forState:UIControlStateHighlighted];
[button setBackgroundImage:[UIImage resizeImage:@"skin_cell_background_highlighted.png"] forState:UIControlStateDisabled];
return button;
} #pragma mark - user的setter
- (void)setUser:(User *)user {
if (_user != user) {
[_user release];
_user = [user retain]; // 下载图片
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:user.avatarLarge]];
request.delegate = self;
[request startAsynchronous]; // 设置名称
_name.text = user.screenName; // 设置简介
NSString *descText = (user.descs==nil || [@"" isEqualToString:user.descs])?@"这个人比较懒,什么也没写":[NSString stringWithFormat:@"简介:\n%@", user.descs];
_desc.text = descText; // 设置数目
[_friends setTitle:[self countText:user.friendsCount title:@"关注"] forState:UIControlStateNormal];
[_followers setTitle:[self countText:user.followersCount title:@"粉丝"] forState:UIControlStateNormal]; // 微博数量
_status.text = [NSString stringWithFormat:@" 共%i条微博", user.statusesCount];
}
} #pragma mark - 生命周期方法
- (id)init {
if (self = [super init]) {
CGSize winSize = [UIScreen mainScreen].bounds.size;
// 顶部
UIImageView *topView = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, winSize.width, kIconHeight + 2*kPadding)] autorelease];
topView.image = [UIImage imageNamed:@"profile_cover_background.png"];
[self addSubview:topView]; // 头像
CGFloat iconX = kPadding;
CGFloat iconY = kPadding;
_icon = [[[UIImageView alloc] initWithFrame:CGRectMake(iconX, iconY, kIconWidth, kIconHeight)] autorelease];
_icon.image = [UIImage imageNamed:@"avatar_default_big.png"];
_icon.layer.cornerRadius = 5;
_icon.layer.masksToBounds = YES;
[topView addSubview:_icon]; // 昵称
CGFloat nameX = iconX + kIconWidth + kPadding;
CGFloat nameY = iconY;
CGFloat nameWidth = winSize.width - nameX - kPadding;
CGFloat nameHeight = kNameSize;
_name = [[[UILabel alloc] init] autorelease];
_name.frame = CGRectMake(nameX, nameY, nameWidth, nameHeight);
_name.backgroundColor = [UIColor clearColor];
_name.font = [UIFont systemFontOfSize:kNameSize];
[topView addSubview:_name]; // 简介
CGFloat descX = nameX;
CGFloat descY = nameY + nameHeight + kPadding;
CGFloat descWidth = nameWidth;
CGFloat descheight = kIconHeight - descY;
_desc = [[[UILabel alloc] init] autorelease];
_desc.frame = CGRectMake(descX, descY, descWidth, descheight);
_desc.font = [UIFont systemFontOfSize:kDescSize];
_desc.backgroundColor = [UIColor clearColor];
_desc.numberOfLines = 0;
_desc.textColor = [UIColor whiteColor];
[topView addSubview:_desc]; // 数目
CGFloat countViewY = topView.frame.size.height;
CGFloat countViewHeight = kCountButtonHeight + 2*kPadding;
UIView *countView = [[[UIView alloc] initWithFrame:CGRectMake(0, countViewY, winSize.width, countViewHeight)] autorelease];
countView.backgroundColor = [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:1];
[self addSubview:countView]; // 关注
CGFloat friendsX = kPadding;
CGFloat friendsY = kPadding;
_friends = [self buttonWithSelector:@selector(btnClick:) x:friendsX y:friendsY];
_friends.tag = kBtnFriend;
[countView addSubview:_friends]; // 粉丝
CGFloat followersX = friendsX + kCountButtonWidth + kPadding;
CGFloat followersY = friendsY;
_followers = [self buttonWithSelector:@selector(btnClick:) x:followersX y:followersY];
_followers.tag = kBtnFollower;
[countView addSubview:_followers]; // 顶部的线
CGFloat bottomHeight = 2;
UIView *bottom = [[[UIView alloc] initWithFrame:CGRectMake(0, countViewHeight - bottomHeight, winSize.width, bottomHeight)] autorelease];
bottom.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"profile_shadow_bottom.png"]];
[countView addSubview:bottom]; // 微博数
CGFloat statusX = 0;
CGFloat statusY = countViewY + countViewHeight + 2;
CGFloat statusHeight = kCountSize + kPadding;
_status = [[[UILabel alloc] init] autorelease];
_status.backgroundColor = kGlobalBg;
_status.frame = CGRectMake(statusX, statusY, winSize.width, statusHeight);
_status.font = [UIFont systemFontOfSize:kCountSize];
[self addSubview:_status]; self.frame = CGRectMake(0, 0, winSize.width, statusY + statusHeight);
}
return self;
} - (void)dealloc {
[_user release];
[super dealloc];
} #pragma mark - ASI代理
- (void)requestFinished:(ASIHTTPRequest *)request {
_icon.image = [UIImage imageWithData:[request responseData]];
}
@end
新浪微博中tableview中头部信息
新浪微博中tableview中头部信息
#import "MyDataController.h"
#import "StatusMgr.h"
#import "ProfileHeaderView.h"
#import "User.h" @interface MyDataController () @end @implementation MyDataController - (void)viewDidLoad
{
[super viewDidLoad];
ProfileHeaderView *headerView = [[[ProfileHeaderView alloc] init] autorelease];
headerView.controller = self;
self.tableView.tableHeaderView = headerView; self.navigationItem.leftBarButtonItem = nil;
self.navigationItem.rightBarButtonItem = nil;
} - (void)queryWithMgr:(StatusMgr *)mgr sinceId:(NSString *)sinceId maxId:(NSString *)maxId count:(int)count {
if (!_uid) {
_uid = [WeiboAccount account].uid;
}
[mgr queryUserStatusesWithSinceId:sinceId maxId:maxId count:count uid:_uid];
} - (void)refreshFinish:(User *)user {
ProfileHeaderView *headerView = (ProfileHeaderView *)self.tableView.tableHeaderView;
headerView.user = user;
} - (void)dealloc {
[_uid release];
[super dealloc];
} - (void)viewDidUnload {
self.uid = nil;
[super viewDidUnload];
} @end
新浪微博中tableview中头部信息
新浪微博中tableview中头部信息
//
// FriendController.m
// 新浪微博
//
// Created by mj on 13-4-22.
// Copyright (c) 2013年 itcast. All rights reserved.
// #import "FriendshipController.h"
#import "FriendshipMgr.h"
#import "User.h"
#import "Status.h"
#import "DownloadOperation.h"
#import <QuartzCore/QuartzCore.h>
#import "MyDataController.h" @interface FriendshipController () {
// 下一页的游标
int _nextCursor;
}
// 所有的关注数据
@property (nonatomic, retain) NSMutableArray *data;
@end @implementation FriendshipController
#pragma mark 下拉刷新
- (void)refreshData {
[super refreshData]; [MBProgressHUD showMessag:kLoadingMsg toView:self.view]; // 查询关注列表数据
FriendshipMgr *mgr = [FriendshipMgr mgr]; if ([self respondsToSelector:@selector(queryWithMgr:uid:count:cursor:)]) {
if (!_uid) {
_uid = [WeiboAccount account].uid;
}
[self queryWithMgr:mgr uid:_uid count:20 cursor:0];
} mgr.queryFriendsBlock =
^ (NSMutableArray *friends, int nextCursor, int totalNumber, NSString *error){
// NSLog(@"friends-%i", friends.count); [MBProgressHUD hideHUDForView:self.view animated:YES]; // 设置数据
self.data = friends; // 刷新数据
[self.tableView reloadData]; // 完成刷新数据,隐藏"下拉刷新"
[self doneRefreshData]; _nextCursor = nextCursor; //
self.forbidLoadMore = nextCursor == 0;
};
} #pragma mark 上拉加载更多
- (void)loadMoreData {
[super loadMoreData]; // 查询关注列表数据
FriendshipMgr *mgr = [FriendshipMgr mgr]; if ([self respondsToSelector:@selector(queryWithMgr:uid:count:cursor:)]) {
// if (!_uid) {
// _uid = [WeiboAccount account].uid;
// }
[self queryWithMgr:mgr uid:_uid count:20 cursor:_nextCursor];
} mgr.queryFriendsBlock =
^ (NSMutableArray *friends, int nextCursor, int totalNumber, NSString *error){
// 添加数据
[self.data addObjectsFromArray:friends]; // 刷新数据
[self.tableView reloadData]; // 完成刷新数据,隐藏"上拉加载更多"
[self doneLoadMoreData]; _nextCursor = nextCursor; // nextCursor为0代表,没有下一页面
self.forbidLoadMore = nextCursor == 0;
};
} #pragma mark - 生命周期方法
- (void)viewDidLoad
{
[super viewDidLoad]; [self refreshData];
} - (void)dealloc {
[_data release];
[_uid release];
[super dealloc];
} - (void)viewDidUnload {
self.data = nil;
self.uid = nil;
[super viewDidUnload];
} #pragma mark - 私有方法
#pragma mark 初始化Cell
- (UITableViewCell *)initCell {
UITableViewCell *cell = [[[NSBundle mainBundle] loadNibNamed:@"FriendCell" owner:nil options:nil] lastObject]; // 设置cell的背景色
UIView *bg = [[[UIView alloc] init] autorelease];
bg.backgroundColor = [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:1];
cell.backgroundView = bg; // 选中的背景
UIView *selectdBg = [[[UIView alloc] init] autorelease];
selectdBg.backgroundColor = [UIColor colorWithRed:0.85 green:0.85 blue:0.85 alpha:1];
cell.selectedBackgroundView = selectdBg; // 设置imageview的圆角半径
UIImageView *imageView = (UIImageView *)[cell viewWithTag:10];
imageView.layer.cornerRadius = 10;
imageView.layer.masksToBounds = YES;
return cell;
}
#pragma mark 设置Cell的数据
- (void)setCell:(UITableViewCell *)cell data:(User *)user {
// 设置昵称
UILabel *screenNameLabel = (UILabel *)[cell viewWithTag:20];
screenNameLabel.text = user.screenName; // 设置最近一条微博的内容
UILabel *statusLabel = (UILabel *)[cell viewWithTag:30];
statusLabel.text = user.status.text; // 获取按钮
UIButton *btn = (UIButton *)[cell viewWithTag:40];
if (user.following) {
// 显示"取消关注"
[btn setNormalBg:@"userinfo_relationship_unfollowbutton_background.png" andHighlighted:@"userinfo_relationship_unfollowbutton_background_highlighted.png"];
[btn setTitle:@"取消关注" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
} else {
// 显示"加关注"
[btn setNormalBg:@"userinfo_relationship_followbutton_background.png" andHighlighted:@"userinfo_relationship_followbutton_background_highlighted.png"];
[btn setTitle:@"加关注" forState:UIControlStateNormal]; [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
}
} #pragma mark - Table view data source
#pragma mark 有多少行数据
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// 根据数据多少来决定是否要显示分隔线
if (self.data.count == 0) {
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
} else {
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
}
return self.data.count;
}
#pragma mark 每一行的Cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) {
// 初始化Cell
cell = [self initCell];
} // 取出这行对应的用户数据
User *user = [self.data objectAtIndex:indexPath.row]; // 设置Cell的数据
[self setCell:cell data:user]; // 从缓存中取图片
UIImage *image = [self.imageCache objectForKey:user.profileImageUrl];
UIImageView *imageView = (UIImageView *)[cell viewWithTag:10];
if (image) {
imageView.image = image;
} else {
// 显示默认图片
imageView.image = [UIImage imageNamed:@"avatar_default.png"]; // 下载图片
[self downloadImageWithUrl:user.profileImageUrl indexPath:indexPath];
} return cell;
} #pragma mark - 代理方法
#pragma mark 每一行的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 60;
}
#pragma mark 选中了某一行
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES]; User *user = [self.data objectAtIndex:indexPath.row]; MyDataController *mydata = [[MyDataController alloc] init];
mydata.title = user.screenName;
mydata.uid = user.uid;
[self.navigationController pushViewController:mydata animated:YES];
[mydata release];
}
@end
新浪微博中tableview中头部信息
新浪微博中tableview中头部信息
//
// FriendController.m
// 新浪微博
//
// Created by mj on 13-4-22.
// Copyright (c) 2013年 itcast. All rights reserved.
// #import "FriendshipController.h"
#import "FriendshipMgr.h"
#import "User.h"
#import "Status.h"
#import "DownloadOperation.h"
#import <QuartzCore/QuartzCore.h>
#import "MyDataController.h" @interface FriendshipController () {
// 下一页的游标
int _nextCursor;
}
// 所有的关注数据
@property (nonatomic, retain) NSMutableArray *data;
@end @implementation FriendshipController
#pragma mark 下拉刷新
- (void)refreshData {
[super refreshData]; [MBProgressHUD showMessag:kLoadingMsg toView:self.view]; // 查询关注列表数据
FriendshipMgr *mgr = [FriendshipMgr mgr]; if ([self respondsToSelector:@selector(queryWithMgr:uid:count:cursor:)]) {
if (!_uid) {
_uid = [WeiboAccount account].uid;
}
[self queryWithMgr:mgr uid:_uid count:20 cursor:0];
} mgr.queryFriendsBlock =
^ (NSMutableArray *friends, int nextCursor, int totalNumber, NSString *error){
// NSLog(@"friends-%i", friends.count); [MBProgressHUD hideHUDForView:self.view animated:YES]; // 设置数据
self.data = friends; // 刷新数据
[self.tableView reloadData]; // 完成刷新数据,隐藏"下拉刷新"
[self doneRefreshData]; _nextCursor = nextCursor; //
self.forbidLoadMore = nextCursor == 0;
};
} #pragma mark 上拉加载更多
- (void)loadMoreData {
[super loadMoreData]; // 查询关注列表数据
FriendshipMgr *mgr = [FriendshipMgr mgr]; if ([self respondsToSelector:@selector(queryWithMgr:uid:count:cursor:)]) {
// if (!_uid) {
// _uid = [WeiboAccount account].uid;
// }
[self queryWithMgr:mgr uid:_uid count:20 cursor:_nextCursor];
} mgr.queryFriendsBlock =
^ (NSMutableArray *friends, int nextCursor, int totalNumber, NSString *error){
// 添加数据
[self.data addObjectsFromArray:friends]; // 刷新数据
[self.tableView reloadData]; // 完成刷新数据,隐藏"上拉加载更多"
[self doneLoadMoreData]; _nextCursor = nextCursor; // nextCursor为0代表,没有下一页面
self.forbidLoadMore = nextCursor == 0;
};
} #pragma mark - 生命周期方法
- (void)viewDidLoad
{
[super viewDidLoad]; [self refreshData];
} - (void)dealloc {
[_data release];
[_uid release];
[super dealloc];
} - (void)viewDidUnload {
self.data = nil;
self.uid = nil;
[super viewDidUnload];
} #pragma mark - 私有方法
#pragma mark 初始化Cell
- (UITableViewCell *)initCell {
UITableViewCell *cell = [[[NSBundle mainBundle] loadNibNamed:@"FriendCell" owner:nil options:nil] lastObject];

//设置cell选中的背景色,cell必须是自定义的
// 设置cell的背景色
UIView *bg = [[[UIView alloc] init] autorelease];
bg.backgroundColor = [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:1];
cell.backgroundView = bg; // 选中的背景
UIView *selectdBg = [[[UIView alloc] init] autorelease];
selectdBg.backgroundColor = [UIColor colorWithRed:0.85 green:0.85 blue:0.85 alpha:1];
cell.selectedBackgroundView = selectdBg; // 设置imageview的圆角半径
UIImageView *imageView = (UIImageView *)[cell viewWithTag:10];
imageView.layer.cornerRadius = 10;
imageView.layer.masksToBounds = YES;
return cell;
}
#pragma mark 设置Cell的数据
- (void)setCell:(UITableViewCell *)cell data:(User *)user {
// 设置昵称
UILabel *screenNameLabel = (UILabel *)[cell viewWithTag:20];
screenNameLabel.text = user.screenName; // 设置最近一条微博的内容
UILabel *statusLabel = (UILabel *)[cell viewWithTag:30];
statusLabel.text = user.status.text; // 获取按钮
UIButton *btn = (UIButton *)[cell viewWithTag:40];
if (user.following) {
// 显示"取消关注"
[btn setNormalBg:@"userinfo_relationship_unfollowbutton_background.png" andHighlighted:@"userinfo_relationship_unfollowbutton_background_highlighted.png"];
[btn setTitle:@"取消关注" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
} else {
// 显示"加关注"
[btn setNormalBg:@"userinfo_relationship_followbutton_background.png" andHighlighted:@"userinfo_relationship_followbutton_background_highlighted.png"];
[btn setTitle:@"加关注" forState:UIControlStateNormal]; [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
}
} #pragma mark - Table view data source
#pragma mark 有多少行数据
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// 根据数据多少来决定是否要显示分隔线
if (self.data.count == 0) {
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
} else {
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
}
return self.data.count;
}
#pragma mark 每一行的Cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) {
// 初始化Cell
cell = [self initCell];
} // 取出这行对应的用户数据
User *user = [self.data objectAtIndex:indexPath.row]; // 设置Cell的数据
[self setCell:cell data:user]; // 从缓存中取图片
UIImage *image = [self.imageCache objectForKey:user.profileImageUrl];
UIImageView *imageView = (UIImageView *)[cell viewWithTag:10];
if (image) {
imageView.image = image;
} else {
// 显示默认图片
imageView.image = [UIImage imageNamed:@"avatar_default.png"]; // 下载图片
[self downloadImageWithUrl:user.profileImageUrl indexPath:indexPath];
} return cell;
} #pragma mark - 代理方法
#pragma mark 每一行的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 60;
}
#pragma mark 选中了某一行
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES]; User *user = [self.data objectAtIndex:indexPath.row]; MyDataController *mydata = [[MyDataController alloc] init];
mydata.title = user.screenName;
mydata.uid = user.uid;
[self.navigationController pushViewController:mydata animated:YES];
[mydata release];
}
@end
新浪微博中tableview中头部信息
上一篇:from表单提交数据之后,后台对象接受不到值


下一篇:MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述