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

最近做的也个项目,要做一个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:



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

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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值