IOS开发---菜鸟学习之路--(八)-实现新闻页面
本章将具体讲述如何结合前两张的内容最终实现一个新闻页面的雏形
之所以称之为雏形,是因为本章实现的内容只是实现了最基础的效果
还有很多其他诸如下拉刷新 页面导航等效果都需要投入一些时间进行研究
好了直接开始整题吧
首先在我们需要新建一个ViewController 同时呢需要勾选 需要创建XIB文件
然后我们从工具栏中直接将tablewview拖拽到我们视图上去
如下所示

接下来我们需要为TableView设置数据源以及代理
我们按住Control键,然后鼠标左键点击TableView 将其拖拽到File's onwer上面
需要操作两次,分别选择 dataSource 和delegate

这样就完成XIB 文件的部分了,
然后我们选择.H 文件进行配置
我们只需要继承两个代理事件
然后添加一个NSARRAY的 listdata就可以进入下一步了
其实这些内容一些教材上面会比我写的更详细,大家可以好好看一下
#import <UIKit/UIKit.h>
@interface NEWSViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>
{
NSArray *listdata;
}
@property(nonatomic,retain) NSArray *listdata;
@end
接下来就是.m文件了
这边我们只要实现 第六章里讲的所有方法就可以我们想要的效果了
另外这边还需要使用到前几章将到getwebinfo 类(网络数据获取类,关于网络获取我之后会专门列出一个章节进行介绍,包含如何实现异步处理等操作)
首先我们需要引用 geiwebinfo类
在前面部分加入
#import "GetWebInfo.h"
然后我们还需要实现一个InitlistData方法用来实现获取数据具体代码如下
我们需要在默认的viewDidLoad 方法中调用此方法,这样的话界面一启动,他就会去网络上获取数据
如果希望切换界面的时候也重新获取数据话,那么只要将 获取数据部分的代码放到ViewWillApper方法中
-(void) initListData
{
GetWebInfo *getwebinfo=[GetWebInfo alloc];
NSString *myparameters=@"&Method=getnewsinfo";
getwebinfo.parameters=myparameters;
NSString *webReturnMessage=[getwebinfo dogetWebInfo];
NSData* jsonData=[webReturnMessage dataUsingEncoding:NSUTF8StringEncoding];
NSArray *keys = [NSJSONSerialization
JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:nil];
self.listdata=keys;
}
- (void)viewDidLoad
{
[self initListData];
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
接下来我们还需要一个个 实现其他几个UITableview的方法 方法的作用我在前面已经介绍过了 这边就不做重复讲解了 直接上代码
numberOfRowsInSection 方法的话我们可以直接返回我们的listdata的个数来告诉UITABLEVIEW有多少行
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [lisrtdata count];
}
然后是heightForRowAtIndexPath 设置行高方法,我这边返回的JSON数据里面是包含一个haveimage 的BOOL类型参数,用以判断是否有图片,
如果没有图片的话,那么就不管他是第几条记录全部都返回50的高度
否则的话再判断当前是否是第一条如果是第一条的话则需要显示大图片那么其高度就要扩大 变为140的高度左右,否则的话就利用普通的样式 使用70的高度
PS:大家如果嫌麻烦的话 高度方面可以只设置两种高度 一种是140的 头图片高度,另一个则不管有没有图片都显示为70高度。
//设置行高
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *haveImage=[[listdata objectAtIndex:[indexPath row]] valueForKey:@"haveimage"];
if([haveImage isEqual:@"False"])
{
return ;
}
else
{
if([indexPath row]==)
{
return ;
}
else
{
return ;
} }
}
设置好了高度之后,我们就需要实现我们的核心代码了
这当中有部分内容涉及到图片转换的问题,我会在之后的内容中进行讲解的。
这边呢我们需要实现 cellForRowAtIndexPath 也就是我前面所说得行绘制事件
具体的介绍我就不多说了,大家可以参照代码来思考。
我就把主要的思路跟大家讲解下
其实行绘制事件 的思路和 行高度的思路是相同的,只不过一个是返回不同的高度,另一个则是返回返回不同的UITableViewCell
同样的我们首先要判断有没有图片,如果有图片的话,再判断一下是不是第一条记录,是的话就返回大图,否则的话就返回小图的样式,这两个样式就是根据我们前面一章所创建的样式。
具体的请参照下面的代码进行理解。
-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *haveImage=[[NSString alloc] initWithString:[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"images"]];
if([haveImage isEqual:@"False"])
{
//static NSString *SignleNoImageIdentifier=@"SignleIdentifier";
static NSString *SignleNoImageIdentifier=@"SignleNoImageIdentifier";
SignleNoImageTableViewCell *cell= (SignleNoImageTableViewCell *)[tableView dequeueReusableCellWithIdentifier:SignleNoImageIdentifier];
if(cell==nil){
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SignleNoImageTableViewCell" owner:self options:nil];
cell = [nib objectAtIndex:];
}
cell.mylabel.text=[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"title"];
return cell;
}
else
{
if([indexPath row]==)
{
// static NSString *TopbigImageIdentifier=@"SignleIdentifier";
static NSString *TopbigImageIdentifier=@"TopbigImageIdentifier";
TopBigImageCell *cell= (TopBigImageCell *)[tableView dequeueReusableCellWithIdentifier:TopbigImageIdentifier];
if(cell==nil){
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TopBigImageCell" owner:self options:nil];
cell = [nib objectAtIndex:];
}
cell.btlabel.text=[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"title"];
NSData *newimage=[Base64AndImageHelp mydataWithBase64EncodedString:[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"images"]];
UIImage *newjiaban=[[UIImage alloc] initWithData:newimage];
cell.myimageView.image=newjiaban;
return cell; }
else
{
static NSString *SignleIdentifier=@"SignleIdentifier";
SingleTableViewCell *cell= (SingleTableViewCell *)[tableView dequeueReusableCellWithIdentifier:SignleIdentifier];
if(cell==nil){
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SingleTableViewCell" owner:self options:nil];
cell = [nib objectAtIndex:];
}
cell.mylabel.text=[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"title"];
NSData *newimage=[Base64AndImageHelp mydataWithBase64EncodedString:[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"images"]];
UIImage *newjiaban=[[UIImage alloc] initWithData:newimage];
cell.myimageView.image=newjiaban;
return cell; } }
}
OK今天的内容就这么多了。
感谢观看,另外如果本文有什么问题的话请及时回复,本人会认真修改,以免误人子弟。
IOS开发---菜鸟学习之路--(八)-实现新闻页面的更多相关文章
- IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路
在不知不觉当中已经写了21篇内容 其实一开始是没有想些什么东西的 只是买了Air后 感觉用着挺舒服的,每天可以躺在床上,就一台笔记本,不用网线,不用电源,不用鼠标,不用键盘,干干脆脆的就一台笔记本. ...
- IOS开发---菜鸟学习之路--(一)
PS(废话): 看了那么多的博客文章,发现大部分人都一直在强调写技术博客的重要性,索性自己也耐着性子写写看吧. 写博客的重要性之类的说明,我就不做复制黏贴的工作了.因为自己没有写过多少,所也不清楚是不 ...
- IOS开发---菜鸟学习之路--(二十三)-直接利用键值对的方式来处理数据的感想
首先声明,本文纯粹只是做为本人个人新手的理解.文中的想法我知道肯定有很多地方是错的. 但是这就是我作为一个新人的使用方法,对于大牛非常欢迎指导,对于喷子请绕道而行. 由于这是早上跟我学长讨论数据处理时 ...
- IOS开发---菜鸟学习之路--(十七)-利用UITableView实现个人信息界面
首先来看下我们要实现的效果 需要实现这样的效果 然后我们开始动手吧. 首先选择添加一个新的ViewController 然后打开XIB文件,添加一UITableView 并将样式设置为分组 同时将按住 ...
- IOS开发---菜鸟学习之路--(十八)-利用代理实现向上一级页面传递数据
其实我一开始是想实现微信的修改个人信息那样的效果 就是点击昵称,然后跳转到另外一个页面输入信息 但是细想发现微信的话应该是修改完一个信息后就保存了 而我做的项目可能需要输入多个数据之后再点击提交的. ...
- IOS开发---菜鸟学习之路--(七)-自定义UITableViewCell
本篇将介绍如何自定义 UITableViewCell 首先选择新建文件 可以直接使用快捷键 COMMAND+n打开新建页面,然后选Objective-C class 然后选择继承之UITableVie ...
- IOS开发---菜鸟学习之路--(五)-MacBook购买前后感想
前几天刚入手了一台MACBOOK AIR 13寸 13版的 这几天使用过来个人感觉还是非常不错的. 这几天每天晚上都抱着她玩到十一.二点. 今天晚上突然想起来好久没续写博客了.就连忙开始码字了. 此章 ...
- IOS开发---菜鸟学习之路--(四)-登陆界面
本篇的内容其实大家 参照橘子的那本开发的书的话 上面讲解的是更详细的 一些实现. 我这边唯一的区别就是 做了网络数据的获取 以及 验证成功后 进行界面的跳转.. 第四篇了 本篇主讲登陆模块 首先先放 ...
- IOS开发---菜鸟学习之路--(二)-数据获取
第二篇了. 本篇要讲的是数据获取. 为什么将数据获取放在第二篇就讲呢? 因为我在看别人教程的时候都是先讲控件的属性,然后怎么用控件开始. 可是毕竟咱们也是有一定开发经验的人..所以很自然就想先知道怎么 ...
随机推荐
- Thread.sleep 与Thread.currentThread.sleep
参考博客: https://blog.csdn.net/guangyinglanshan/article/details/51645053 公司项目近段时间要使用thread, 个人想去了解Threa ...
- 事件(Application Event)
Spring的事件(Appllcation Event)为Bean与Bean之间的消息通信提供了支持.当一个Bean处理完一个任务后,希望另一个Bean知道并能做相应的处理,这种情况可以让另一个Bea ...
- WebClient实现文件下载详解(二)
.Net2.0中新增了很多组件,WebClient就是其中一个,功能也很强大,今天拿WebClient做了一个小实验,只用到了一些很简单的功能就可以实现以前不好实现的功能,很方便. 简单介绍一下Web ...
- UVALive 4727 Jump(约瑟夫环,递推)
分析: 如果问题是要求最后一个删除的数,重新编号为0到n-1,f[n]表示答案,那么f[n] = (f[n-1]+k)%n. 因为删掉下标k-1以后可以从下标k重新编号为0. 在这个问题只需要推出最后 ...
- POJ-3565 Ants---KM算法+slack优化
题目链接: https://vjudge.net/problem/POJ-3565 题目大意: 在坐标系中有N只蚂蚁,N棵苹果树,给你蚂蚁和苹果树的坐标.让每只蚂蚁去一棵苹果树, 一棵苹果树对应一只蚂 ...
- 2018.6.1 oracle数据库乱码问题
执行select * from v$controlfile;为什么结果是未选定行? 显示连接了但是select * from dba_data_files; 显示中文乱码: shutdown star ...
- python_61_装饰器4
import time def timer(func):#timer(test1) func=test1 def deco(): start_time=time.time() func()#run t ...
- 树莓派(raspberry pi)更改键盘布局
http://blog.csdn.net/c80486/article/details/8460271 树莓派(raspberry pi)用了几次后,发现键盘老是按错,一些字符打不出来或打错 这个问题 ...
- 题解 P1319 【压缩技术】
这题是红题,我都觉得我的题解过不了 这道题输入不像别的题,给一个参数 n ,然后输入 n 的倍数个数据,它是给一个 n , 再输入一堆数.看题目,n × n ? 是不是就说明了给出的数和一定,都是 n ...
- 由一道CTF pwn题深入理解libc2.26中的tcache机制
本文首发安全客:https://www.anquanke.com/post/id/104760 在刚结束的HITB-XCTF有一道pwn题gundam使用了2.26版本的libc.因为2.26版本中加 ...