最近做的也个项目,要做一个IOS的新闻展示view(有图有文字,不用UIwebview,因为数据是用webservice解析的到的json数据),自己一直没有头绪,可后来听一个学长说可以用listview.。但我查了查ios好像没有listview。于是就用UITableView和自定义cell解决了这个问题。
效果图如下:
UITableView:
// // 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
// // 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:
// 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
// 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:
具体操作我就不说了挺简单,想知道的可以到新浪微博@我。