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

效果图如下:

UITableView:

  1. //
  2. //  NewsDetailViewController.h
  3. //  SildToDo
  4. //
  5. //  Created by WildCat on 13-8-18.
  6. //  Copyright (c) 2013年 wildcat. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. @interface NewsDetailViewController : UITableViewController
  10. @property (nonatomic,copy) NSArray *dataArray;
  11. @property (nonatomic, strong)
  12. UISwipeGestureRecognizer *swipeGestureRecognizer;
  13. @end
  1. //
  2. //  NewsDetailViewController.m
  3. //  SildToDo
  4. //
  5. //  Created by WildCat on 13-8-18.
  6. //  Copyright (c) 2013年 wildcat. All rights reserved.
  7. //
  8. #import "NewsDetailViewController.h"
  9. #import "MyTableViewImageCell.h"
  10. #define FONT_SIZE 14.0f
  11. #define TITLE_FONT_SIZE 18.0f
  12. #define CELL_CONTENT_WIDTH 320.0f
  13. #define CELL_CONTENT_MARGIN 12.0f
  14. @interface NewsDetailViewController ()
  15. @property NSInteger  lableCount;
  16. @end
  17. @implementation NewsDetailViewController
  18. @synthesize dataArray;
  19. @synthesize lableCount;
  20. @synthesize swipeGestureRecognizer;
  21. - (id)initWithStyle:(UITableViewStyle)style
  22. {
  23. self = [super initWithStyle:style];
  24. if (self) {
  25. }
  26. return self;
  27. }
  28. - (void)viewDidLoad
  29. {
  30. [super viewDidLoad];
  31. UIImage *myimage1=[UIImage imageNamed:@"3.jpeg"];
  32. UIImage *myimage2=[UIImage imageNamed:@"2.jpg"];
  33. 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];
  34. //手势识别
  35. self.swipeGestureRecognizer = [[UISwipeGestureRecognizer alloc]
  36. initWithTarget:self action:@selector(handleSwipes:)];
  37. /* Swipes that are performed from right to left are to be detected */
  38. self.swipeGestureRecognizer.direction=UISwipeGestureRecognizerDirectionRight;
  39. self.swipeGestureRecognizer.direction=UISwipeGestureRecognizerDirectionDown;
  40. /* Just one finger needed */
  41. self.swipeGestureRecognizer.numberOfTouchesRequired = 1;
  42. /* Add it to the view */
  43. [self.tableView addGestureRecognizer:self.swipeGestureRecognizer];
  44. self.tableView.bounces=NO;
  45. }
  46. - (void)viewDidUnload
  47. {
  48. [super viewDidUnload];
  49. self.swipeGestureRecognizer = nil;
  50. }
  51. //手势识别处理方法
  52. - (void) handleSwipes:(UISwipeGestureRecognizer *)paramSender{
  53. if (paramSender.direction & UISwipeGestureRecognizerDirectionDown){ NSLog(@"Swiped Down.");
  54. }
  55. if (paramSender.direction & UISwipeGestureRecognizerDirectionLeft){
  56. NSLog(@"Swiped Left."); }
  57. if (paramSender.direction & UISwipeGestureRecognizerDirectionRight){ NSLog(@"Swiped Right.");
  58. }
  59. if (paramSender.direction & UISwipeGestureRecognizerDirectionUp){
  60. NSLog(@"Swiped Up."); }
  61. }
  62. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
  63. {
  64. return (interfaceOrientation == UIInterfaceOrientationPortrait);
  65. }
  66. #pragma mark - Table view data source
  67. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  68. {
  69. return 1;
  70. }
  71. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  72. {
  73. return [self.dataArray count];
  74. }
  75. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  76. {
  77. static NSString *CellIdentifier = @"Cell";
  78. static NSString *ImageCellIdentifier = @"MyTableViewImageCell";
  79. UILabel *label = nil;
  80. UITableViewCell *cell=nil;
  81. MyTableViewImageCell *imageCell=nil;
  82. //判断对象的类型
  83. if ([[self.dataArray objectAtIndex:[indexPath row]] isKindOfClass:[NSString class]]) { //如果是文字
  84. cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  85. CGSize size;
  86. if (cell == nil)
  87. {
  88. cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  89. label = [[UILabel alloc] initWithFrame:CGRectZero];
  90. [label setLineBreakMode:UILineBreakModeWordWrap];
  91. [label setNumberOfLines:0];
  92. [label setTag:1];
  93. [[cell contentView] addSubview:label];
  94. }
  95. NSString *text = [self.dataArray objectAtIndex:[indexPath row]];
  96. if (!label){ label = (UILabel*)[cell viewWithTag:1];}
  97. CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);
  98. if (indexPath.row==0) {  //如果是文章标题
  99. [label setFont:[UIFont  boldSystemFontOfSize:TITLE_FONT_SIZE]];
  100. [label setMinimumFontSize:TITLE_FONT_SIZE];
  101. size = [text sizeWithFont:[UIFont  boldSystemFontOfSize:TITLE_FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
  102. }else{
  103. [label setFont:[UIFont systemFontOfSize:FONT_SIZE]];
  104. [label setMinimumFontSize:FONT_SIZE];
  105. size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
  106. }
  107. [label setText:text];
  108. [label setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), MAX(size.height, 44.0f))];
  109. }else if([[self.dataArray objectAtIndex:[indexPath row]] isKindOfClass:[UIImage class]]){ //如果是图片
  110. imageCell= [tableView dequeueReusableCellWithIdentifier:ImageCellIdentifier];
  111. if (cell==nil) {
  112. cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ImageCellIdentifier];
  113. }
  114. imageCell.myImageView.image=[self.dataArray objectAtIndex:[indexPath row]];
  115. imageCell.selectionStyle = UITableViewCellSelectionStyleNone;//不能被选择
  116. return imageCell;
  117. }
  118. cell.selectionStyle = UITableViewCellSelectionStyleNone;//不能被选择
  119. return  cell;
  120. }
  121. -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
  122. NSString *text;
  123. CGFloat lastHeight=0.f;
  124. if ([[self.dataArray objectAtIndex:indexPath.row] isKindOfClass:[NSString class]]) {
  125. text = [self.dataArray objectAtIndex:indexPath.row];
  126. CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);
  127. CGSize size;
  128. if (indexPath.row==0) {
  129. size = [text sizeWithFont:[UIFont boldSystemFontOfSize:TITLE_FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
  130. }else{
  131. size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
  132. }
  133. CGFloat height = MAX(size.height, 44.0f);
  134. lastHeight=height + (CELL_CONTENT_MARGIN * 2);
  135. }else{
  136. if ([[self.dataArray objectAtIndex:indexPath.row] size].height>112.f) {
  137. lastHeight=112.f;
  138. }else{
  139. lastHeight=[[self.dataArray objectAtIndex:indexPath.row] size].height;
  140. }
  141. }
  142. return lastHeight;
  143. }
  144. #pragma mark - Table view delegate
  145. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  146. {
  147. }
  148. @end

UItableViewCell:

  1. //  MyTableViewImageCell.h
  2. //  SildToDo
  3. //
  4. //  Created by WildCat on 13-8-18.
  5. //  Copyright (c) 2013年 wildcat. All rights reserved.
  6. //
  7. #import <UIKit/UIKit.h>
  8. @interface MyTableViewImageCell : UITableViewCell
  9. @property (weak, nonatomic) IBOutlet UIImageView *myImageView;
  10. @end
  1. //  MyTableViewImageCell.m
  2. //  SildToDo
  3. //
  4. //  Created by WildCat on 13-8-18.
  5. //  Copyright (c) 2013年 wildcat. All rights reserved.
  6. //
  7. #import "MyTableViewImageCell.h"
  8. @implementation MyTableViewImageCell
  9. @synthesize myImageView;
  10. - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
  11. {
  12. self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  13. if (self) {
  14. // Initialization code
  15. }
  16. return self;
  17. }
  18. - (void)setSelected:(BOOL)selected animated:(BOOL)animated
  19. {
  20. [super setSelected:selected animated:animated];
  21. // Configure the view for the selected state
  22. }
  23. @end

StoryBoard:

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

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

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

IOS学习之路十四(用TableView做的新闻客户端展示页面)的更多相关文章

  1. 用TableView做的新闻客户端展示页面

    用TableView做的新闻客户端展示页面 //  MyTableViewImageCell.m //  SildToDo // //  Created by WildCat on 13-8-18. ...

  2. IOS学习之路十二(UITableView下拉刷新页面)

    今天做了一个下拉刷新的demo,主要用到了实现的开源框架是:https://github.com/enormego/EGOTableViewPullRefresh 运行结果如下: 实现很简单下载源代码 ...

  3. iOS学习笔记(十四)——打电话、发短信

    电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [[UIApplication sharedApplicatio ...

  4. 学习之路十四:客户端调用WCF服务的几种方法小议

    最近项目中接触了一点WCF的知识,也就是怎么调用WCF服务,上网查了一些资料,很快就搞出来,可是不符合头的要求,主要有以下几个方面: ①WCF的地址会变动,地址虽变,但是里面的逻辑不变! ②不要引用W ...

  5. 我的iOS学习之路(四):动画设置

    在ios的开发过程中,经常需要对视图控件进行变化,如大小,颜色,旋转等,这是如果直接将变化结果呈现出来,就显得不够友好,所以我们通常会使用动画,让用户能够看到变化的过程. 使用动画通常有两种方式,一种 ...

  6. 嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞

    目的:同一个时刻,只能有一个应用程序打开我们的驱动程序. ①原子操作: v = ATOMIC_INIT( i )  定义原子变量v并初始化为i atomic_read(v)        返回原子变量 ...

  7. zigbee学习之路(十四):基于协议栈的无线数据传输

    一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...

  8. IOS学习之路十五(UIView 添加背景图片以及加边框)

    怎样给UIview添加背景图片呢很简单,就是先给view添加一个subview,然后设为背景图片: 效果图如下: 很简单直接上代码: //设置内容 self.myTopView.backgroundC ...

  9. IOS学习之路十(仿人人滑动菜单Slide-out Sidebar Menu)

    最近滑动菜单比较流行,像facebook和人人等都在使用滑动菜单,今天做了一个小demo大体效果如下: 这次用了一个开源的项目ECSlidingViewController这个也是一个挺著名的托管在G ...

随机推荐

  1. 【转】HTTP协议两种提交参数的方式Form-data和raw

    原文:http://www.cnblogs.com/zhangfei/p/5099036.html HTTP协议的接口测试中,使用到最多的就是GET请求与POST请求,其中POST请求有FORM参数提 ...

  2. 【百度地图API】如何根据摩卡托坐标进行POI查询,和计算两点距离

    原文:[百度地图API]如何根据摩卡托坐标进行POI查询,和计算两点距离 摘要: 百度地图API有两种坐标系,一种是百度经纬度,一种是摩卡托坐标系.在本章你将学会: 1.如何相互转换这两种坐标: 2. ...

  3. javascript正则表达式小数类型

    假设你要阅读并了解什么,能阅读.假设只需要结果,直接跳转到这篇文章的结尾. 有使用前需求javascript正则表达式匹配小数类型,后来,他们已经写是不完全正确的识别. 后来在网上找了很多,甚至包含一 ...

  4. 搭建一个BS 的简单SOA 架构(直接通过jquery 调用后台的 wcf 服务的架构)(第一天)

    亲们!还在用传统的三层架构吗?你还在对SOA架构 不了解吗? 那就赶快来学习下一个 比较简单的SOA的架构吧!我会手把手的 教会你们怎么搭建这个 简单的SOA的架构. 其中用的技术点保证  WCF,a ...

  5. Java多线程的~~~Lock接口和ReentrantLock使用

    在多线程开发.除了synchronized这个keyword外,我们还通过Lock接口来实现这样的效果.由Lock接口来实现 这样的多线程加锁效果的优点是非常的灵活,我们不在须要对整个函数加锁,并且能 ...

  6. php设计模式(一):简介及创建型模式

    我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式. 一.设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用.容易被他人理解的.可靠的代码设计经验的总结. ...

  7. Android基础之——startActivityForResult启动界面并返回数据,上传头像

    在android应用的开发过程中,常常会出现启动一个界面后填写部分内容后带着数据返回启动前的界面,最典型的应用就是登录过程.在非常多应用程序的模块中,都有"我的"这个模块,在未登录 ...

  8. view components介绍

    view components介绍 在ASP.NET MVC 6中,view components (VCs) 功能类似于虚拟视图,但是功能更加强大. VCs兼顾了视图和控制器的优点,你可以把VCs ...

  9. webkit内核下的mouseup后mousemove自动触发问题及解决方法

    如题,就以chrome为代表举例说明遇到mousemove的问题. 为body分别绑定onmousedown.onmousemove.onmouseup,并为触发时打印至控制台.代码如下(同学不要忘记 ...

  10. 2.3 LINQ查询表达式中 使用select子句 指定目标数据

    本篇讲解LINQ查询的三种形式: 查询对象 自定义查询对象某个属性 查询匿名类型结果 [1.查询结果返回集合元素] 在LINQ查询中,select子句和from子句都是必备子句.LINQ查询表达式必须 ...