您的位置:首页 > 移动开发 > IOS开发

IOS学习之路十四(用TableView做的新闻客户端展示页面)

2013-09-09 22:01 453 查看
最近做的也个项目,要做一个IOS的新闻展示view(有图有文字,不用UIwebview,因为数据是用webservice解析的到的json数据),自己一直没有头绪,可后来听一个学长说可以用listview.。但我查了查ios好像没有listview。于是就用UITableView和自定义cell解决了这个问题。

效果图如下:



UITableView:

[html] view plaincopyprint?

//

// NewsDetailViewController.h

// SildToDo

//

// Created by WildCat on 13-8-18.

// Copyright (c) 2013年 wildcat. All rights reserved.

//

#import <UIKit/UIKit.h>

@interface NewsDetailViewController : UITableViewController

@property (nonatomic,copy) NSArray *dataArray;

@property (nonatomic, strong)

UISwipeGestureRecognizer *swipeGestureRecognizer;

@end

[html] view plaincopyprint?

//

// NewsDetailViewController.m

// SildToDo

//

// Created by WildCat on 13-8-18.

// Copyright (c) 2013年 wildcat. All rights reserved.

//

#import "NewsDetailViewController.h"

#import "MyTableViewImageCell.h"

#define FONT_SIZE 14.0f

#define TITLE_FONT_SIZE 18.0f

#define CELL_CONTENT_WIDTH 320.0f

#define CELL_CONTENT_MARGIN 12.0f

@interface NewsDetailViewController ()

@property NSInteger lableCount;

@end

@implementation NewsDetailViewController

@synthesize dataArray;

@synthesize lableCount;

@synthesize swipeGestureRecognizer;

- (id)initWithStyle:(UITableViewStyle)style

{

self = [super initWithStyle:style];

if (self) {

}

return self;

}

- (void)viewDidLoad

{

[super viewDidLoad];

UIImage *myimage1=[UIImage imageNamed:@"3.jpeg"];

UIImage *myimage2=[UIImage imageNamed:@"2.jpg"];

self.dataArray=[NSArray arrayWithObjects:@"小米手机-HAXLR8on硬件黑客马拉松 开团了!",@" 2 由小米手机独家冠名,CSDN、Seeed Studio、HAXLR8R联合举办的硬件黑客马拉松“小米手机-HAXLR8on”,将于8月24日至8月25日在深圳贝塔咖啡举行。你希望做一个手机拍照的控制器?还是高端一点,做一个由脑波控制的小设备?这些在这里都能实现!本次比赛设有一等奖一个、二等奖两个、三等奖三个以及参与奖若干。一等奖获得者可赢取由小米独家提",myimage2,@" 3 供的10000元奖金和一部小米手机,而且每一位参赛者也都由小米手机独家冠名,CSDN、Seeed Studio、HAXLR8R联合举办的硬件黑客马拉松“小米",myimage1,@" 4 手机-HAXLR8on”,将于8月24日至8月25日在深圳贝塔咖啡举行。你希望做一个手机拍照的控制器?还是高端一点,做一个由脑波控制的小设备?这些在这里都能实现!本次比赛设有一等奖一个、二等奖两个、三等奖三个以及参与奖若干。一等奖获得者可赢取由小米独家提供的10000元奖金和一部小米手机,而且每一位参赛者也都将获得由小米独家提供小米盒子一台。", nil];

//手势识别

self.swipeGestureRecognizer = [[UISwipeGestureRecognizer alloc]

initWithTarget:self action:@selector(handleSwipes:)];

/* Swipes that are performed from right to left are to be detected */

self.swipeGestureRecognizer.direction=UISwipeGestureRecognizerDirectionRight;

self.swipeGestureRecognizer.direction=UISwipeGestureRecognizerDirectionDown;

/* Just one finger needed */

self.swipeGestureRecognizer.numberOfTouchesRequired = 1;

/* Add it to the view */

[self.tableView addGestureRecognizer:self.swipeGestureRecognizer];

self.tableView.bounces=NO;

}

- (void)viewDidUnload

{

[super viewDidUnload];

self.swipeGestureRecognizer = nil;

}

//手势识别处理方法

- (void) handleSwipes:(UISwipeGestureRecognizer *)paramSender{

if (paramSender.direction & UISwipeGestureRecognizerDirectionDown){ NSLog(@"Swiped Down.");

}

if (paramSender.direction & UISwipeGestureRecognizerDirectionLeft){

NSLog(@"Swiped Left."); }

if (paramSender.direction & UISwipeGestureRecognizerDirectionRight){ NSLog(@"Swiped Right.");

}

if (paramSender.direction & UISwipeGestureRecognizerDirectionUp){

NSLog(@"Swiped Up."); }

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return 1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return [self.dataArray count];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *CellIdentifier = @"Cell";

static NSString *ImageCellIdentifier = @"MyTableViewImageCell";

UILabel *label = nil;

UITableViewCell *cell=nil;

MyTableViewImageCell *imageCell=nil;

//判断对象的类型

if ([[self.dataArray objectAtIndex:[indexPath row]] isKindOfClass:[NSString class]]) { //如果是文字

cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

CGSize size;

if (cell == nil)

{

cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

label = [[UILabel alloc] initWithFrame:CGRectZero];

[label setLineBreakMode:UILineBreakModeWordWrap];

[label setNumberOfLines:0];

[label setTag:1];

[[cell contentView] addSubview:label];

}

NSString *text = [self.dataArray objectAtIndex:[indexPath row]];

if (!label){ label = (UILabel*)[cell viewWithTag:1];}

CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

if (indexPath.row==0) { //如果是文章标题

[label setFont:[UIFont boldSystemFontOfSize:TITLE_FONT_SIZE]];

[label setMinimumFontSize:TITLE_FONT_SIZE];

size = [text sizeWithFont:[UIFont boldSystemFontOfSize:TITLE_FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

}else{

[label setFont:[UIFont systemFontOfSize:FONT_SIZE]];

[label setMinimumFontSize:FONT_SIZE];

size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

}

[label setText:text];

[label setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), MAX(size.height, 44.0f))];

}else if([[self.dataArray objectAtIndex:[indexPath row]] isKindOfClass:[UIImage class]]){ //如果是图片

imageCell= [tableView dequeueReusableCellWithIdentifier:ImageCellIdentifier];

if (cell==nil) {

cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ImageCellIdentifier];

}

imageCell.myImageView.image=[self.dataArray objectAtIndex:[indexPath row]];

imageCell.selectionStyle = UITableViewCellSelectionStyleNone;//不能被选择

return imageCell;

}

cell.selectionStyle = UITableViewCellSelectionStyleNone;//不能被选择

return cell;

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

NSString *text;

CGFloat lastHeight=0.f;

if ([[self.dataArray objectAtIndex:indexPath.row] isKindOfClass:[NSString class]]) {

text = [self.dataArray objectAtIndex:indexPath.row];

CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

CGSize size;

if (indexPath.row==0) {

size = [text sizeWithFont:[UIFont boldSystemFontOfSize:TITLE_FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

}else{

size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

}

CGFloat height = MAX(size.height, 44.0f);

lastHeight=height + (CELL_CONTENT_MARGIN * 2);

}else{

if ([[self.dataArray objectAtIndex:indexPath.row] size].height>112.f) {

lastHeight=112.f;

}else{

lastHeight=[[self.dataArray objectAtIndex:indexPath.row] size].height;

}

}

return lastHeight;

}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

}

@end

UItableViewCell:

[html] view plaincopyprint?

// MyTableViewImageCell.h

// SildToDo

//

// Created by WildCat on 13-8-18.

// Copyright (c) 2013年 wildcat. All rights reserved.

//

#import <UIKit/UIKit.h>

@interface MyTableViewImageCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UIImageView *myImageView;

@end

[html] view plaincopyprint?

// MyTableViewImageCell.m

// SildToDo

//

// Created by WildCat on 13-8-18.

// Copyright (c) 2013年 wildcat. All rights reserved.

//

#import "MyTableViewImageCell.h"

@implementation MyTableViewImageCell

@synthesize myImageView;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

{

self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

if (self) {

// Initialization code

}

return self;

}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated

{

[super setSelected:selected animated:animated];

// Configure the view for the selected state

}

@end

StoryBoard:



具体操作我就不说了挺简单,想知道的可以到新浪微博@我。

新浪微博:http://weibo.com/u/3202802157

转载请注明:
本文转自:http://blog.csdn.net/wildcatlele

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: