本章将具体讲述如何结合前两张的内容最终实现一个新闻页面的雏形

之所以称之为雏形,是因为本章实现的内容只是实现了最基础的效果

还有很多其他诸如下拉刷新 页面导航等效果都需要投入一些时间进行研究

好了直接开始整题吧

首先在我们需要新建一个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开发---菜鸟学习之路--(八)-实现新闻页面的更多相关文章

  1. IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路

    在不知不觉当中已经写了21篇内容 其实一开始是没有想些什么东西的 只是买了Air后 感觉用着挺舒服的,每天可以躺在床上,就一台笔记本,不用网线,不用电源,不用鼠标,不用键盘,干干脆脆的就一台笔记本. ...

  2. IOS开发---菜鸟学习之路--(一)

    PS(废话): 看了那么多的博客文章,发现大部分人都一直在强调写技术博客的重要性,索性自己也耐着性子写写看吧. 写博客的重要性之类的说明,我就不做复制黏贴的工作了.因为自己没有写过多少,所也不清楚是不 ...

  3. IOS开发---菜鸟学习之路--(二十三)-直接利用键值对的方式来处理数据的感想

    首先声明,本文纯粹只是做为本人个人新手的理解.文中的想法我知道肯定有很多地方是错的. 但是这就是我作为一个新人的使用方法,对于大牛非常欢迎指导,对于喷子请绕道而行. 由于这是早上跟我学长讨论数据处理时 ...

  4. IOS开发---菜鸟学习之路--(十七)-利用UITableView实现个人信息界面

    首先来看下我们要实现的效果 需要实现这样的效果 然后我们开始动手吧. 首先选择添加一个新的ViewController 然后打开XIB文件,添加一UITableView 并将样式设置为分组 同时将按住 ...

  5. IOS开发---菜鸟学习之路--(十八)-利用代理实现向上一级页面传递数据

    其实我一开始是想实现微信的修改个人信息那样的效果 就是点击昵称,然后跳转到另外一个页面输入信息 但是细想发现微信的话应该是修改完一个信息后就保存了 而我做的项目可能需要输入多个数据之后再点击提交的. ...

  6. IOS开发---菜鸟学习之路--(七)-自定义UITableViewCell

    本篇将介绍如何自定义 UITableViewCell 首先选择新建文件 可以直接使用快捷键 COMMAND+n打开新建页面,然后选Objective-C class 然后选择继承之UITableVie ...

  7. IOS开发---菜鸟学习之路--(五)-MacBook购买前后感想

    前几天刚入手了一台MACBOOK AIR 13寸 13版的 这几天使用过来个人感觉还是非常不错的. 这几天每天晚上都抱着她玩到十一.二点. 今天晚上突然想起来好久没续写博客了.就连忙开始码字了. 此章 ...

  8. IOS开发---菜鸟学习之路--(四)-登陆界面

    本篇的内容其实大家 参照橘子的那本开发的书的话  上面讲解的是更详细的 一些实现. 我这边唯一的区别就是 做了网络数据的获取 以及 验证成功后 进行界面的跳转.. 第四篇了 本篇主讲登陆模块 首先先放 ...

  9. IOS开发---菜鸟学习之路--(二)-数据获取

    第二篇了. 本篇要讲的是数据获取. 为什么将数据获取放在第二篇就讲呢? 因为我在看别人教程的时候都是先讲控件的属性,然后怎么用控件开始. 可是毕竟咱们也是有一定开发经验的人..所以很自然就想先知道怎么 ...

随机推荐

  1. wordpress中一些喜欢的主题

    Personal lite Bhari Blogi

  2. HDU 1011 Starship Troopers星河战队(树形dp)

    题意 有n个洞穴编号为1-n,洞穴间有通道,形成了一个n-1条边的树, 洞穴的入口即根节点是1. 每个洞穴有x只bugs,并有价值y的金子,全部消灭完一个洞穴的虫子,就可以获得这个洞穴的y个金子. 现 ...

  3. oracle 11g r2卸载

    1. 进入计算机管理>>服务里,停止所有oracle的服务 2. 开始菜单>>程序>>Oracle>>Oracle安装产品>>Univers ...

  4. Sonar服务器搭建

    Sonar服务器搭建 Sonar概述 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具.与持续集成工具(例如 Hudson ...

  5. CentOS替换系统自带JDK

    1.解压jdk安装包到/opt 下 /opt/jdk1.8.0_181 2.编辑/etc/profile, 增加如下内容 export JAVA_HOME=/opt/jdk1.8.0_181expor ...

  6. CUDA入门需要知道的东西

    CUDA刚学习不久,做毕业要用,也没时间研究太多的东西,我的博客里有一些我自己看过的东西,不敢保证都特别有用,但是至少对刚入门的朋友或多或少希望对大家有一点帮助吧,若果你是大牛请指针不对的地方,如果你 ...

  7. React后台管理系统-商品管理列表组件

    1.商品列表页面结构 <div id="page-wrapper">              <PageTitle title="商品列表" ...

  8. iOS开发——应用间跳转

    iOS开发过程中,我们经常碰到应用间跳转的情景: 1.使用第三方用户登录,跳转到需授权的App或跳转到分享app的对应页面 *需要用户授权,还需要"返回到调用的程序,同时返回授权的用户名.密 ...

  9. JAVA 优先获取外网Ip,再获取内网Ip

    1.获取内网Ip private String getLocalhostIp(){ String hostAddress = ""; try { InetAddress addre ...

  10. ElasticSearch部署问题

    以下几个是以前在自己部署ElaticSearch的时候收集到的,认为有用的 https://my.oschina.net/topeagle/blog/591451?fromerr=mzOr2qzZ h ...