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
IOS学习之路十四(用TableView做的新闻客户端展示页面)的更多相关文章
- 用TableView做的新闻客户端展示页面
用TableView做的新闻客户端展示页面 // MyTableViewImageCell.m // SildToDo // // Created by WildCat on 13-8-18. ...
- IOS学习之路十二(UITableView下拉刷新页面)
今天做了一个下拉刷新的demo,主要用到了实现的开源框架是:https://github.com/enormego/EGOTableViewPullRefresh 运行结果如下: 实现很简单下载源代码 ...
- iOS学习笔记(十四)——打电话、发短信
电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [[UIApplication sharedApplicatio ...
- 学习之路十四:客户端调用WCF服务的几种方法小议
最近项目中接触了一点WCF的知识,也就是怎么调用WCF服务,上网查了一些资料,很快就搞出来,可是不符合头的要求,主要有以下几个方面: ①WCF的地址会变动,地址虽变,但是里面的逻辑不变! ②不要引用W ...
- 我的iOS学习之路(四):动画设置
在ios的开发过程中,经常需要对视图控件进行变化,如大小,颜色,旋转等,这是如果直接将变化结果呈现出来,就显得不够友好,所以我们通常会使用动画,让用户能够看到变化的过程. 使用动画通常有两种方式,一种 ...
- 嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞
目的:同一个时刻,只能有一个应用程序打开我们的驱动程序. ①原子操作: v = ATOMIC_INIT( i ) 定义原子变量v并初始化为i atomic_read(v) 返回原子变量 ...
- zigbee学习之路(十四):基于协议栈的无线数据传输
一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...
- IOS学习之路十五(UIView 添加背景图片以及加边框)
怎样给UIview添加背景图片呢很简单,就是先给view添加一个subview,然后设为背景图片: 效果图如下: 很简单直接上代码: //设置内容 self.myTopView.backgroundC ...
- IOS学习之路十(仿人人滑动菜单Slide-out Sidebar Menu)
最近滑动菜单比较流行,像facebook和人人等都在使用滑动菜单,今天做了一个小demo大体效果如下: 这次用了一个开源的项目ECSlidingViewController这个也是一个挺著名的托管在G ...
随机推荐
- 取一种类型里面的产品销售前3甲的数据Sql
需求:取出每种分类里面的销售前3甲的产品信息 表设计如下图: 数据如下: 两种方法可以实现: 1. SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION ...
- linux_java_redis_postgresql_常用命令
redis 常用语法telnet 192.168.18.210 6379keys *llen队列名称llen 队列名称 postgresql常用语法psql -h192.168.18.210 -Up ...
- iterm2 快捷键大全 Mac item2常用快捷键
整理使用 iTerm 2 过程中得常用快捷键,Mac 原来自带的终端工具 Terminal 不好用是出了名的,虽然最近几个版本苹果稍微做了些优化,功能上,可用性方面增强不少,无奈有个更好用的 Iter ...
- 线程同步synchronized
一Java规划共享多个线程之间数据的能力. 当线程以异步方式訪问共享数据时.有时候是不安全的或者不和逻辑的. 比方卖火车票.同一时刻一个线程在读取数据,另外一个线程在处理数据,当处理数据的线程没有等到 ...
- Java泛型解析(03):虚拟机运行泛型代码
Java泛型解析(03):虚拟机运行泛型代码 Java虚拟机是不存在泛型类型对象的,全部的对象都属于普通类,甚至在泛型实现的早起版本号中,可以将使用泛型的程序编译为在1.0虚拟机上可以执行的 ...
- Dungeon Master poj 2251 dfs
Language: Default Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16855 ...
- 给已经编译运行的Apache增加mod_proxy模块的配置方法
在Linux系统下,需要给已经编译运行的Apache增加mod_proxy模块,可以按照如下方法配置. 具体配置步骤如下: 1. 首先定位到Apache源码的 proxy目录 # cd /root/s ...
- ASP.NET 5:初始化数据库
ASP.NET 5:初始化数据库 1.初始化数据库 1.2目录 这不是专述模式/架构设计的帖子,架构搭建以讲解文章为目的,先不过多分层. 截这个图也是便于你对应下面找代码文件路径! 1.2代码 先控制 ...
- sql性能
---正在运行的 select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT from v$session a, v$sqlarea b where a ...
- Android 通过网络打开自己的APP(scheme)
通过使用手机的浏览器(内部.第三方能够)访问网页,点击一个链接,开始实施自己的应用程序,和传输数据. 第一Mainifest面对文件启动Activity添加过滤器. <activity andr ...