前面已经将了上下拉刷新

实现了上下拉刷新后我们的第一级界面就做好,接下来我们就需要实现 新闻详细信息浏览了

我个人认为一般实现新闻详细页面的方法有两种(主要是数据源的不同导致了方法的不同)

第一种是本身新闻就是一个链接地址,同时是已经处理好的适应手机浏览的网页

对于这种类型的数据源,我们直接在页面中放一个WebView控件,然后将URL传递过去就好了

另一种则是普通的包含标题、时间、内容、图片等数据结构的新闻内容(我们要实现的也是这种新闻,因为实现了这种之后, 我们就可以实现任何自定义的详细信息的页面了。)

首先我们需要新建一个UIViewController 取名叫做SingleNewsInfoViewController吧

具体的创建步骤我就不做截图描述了,到这个地步没必要再讲这些了

直接开始正题吧

首先我们先在XIB文件中添加一个UIScroolView 然后在UIScroolView中添加    两个UILabel 控件和一个UITextView控件

结构如下图所示

然后是配置.H文件

不多说。直接上代码比较直观

#import <UIKit/UIKit.h>

@interface SingleNewsInfoViewController : UIViewController{
NSString *mynewid;
UILabel *titlelabel;
UILabel *timelabel;
NSArray *images;
UITextView *contenttextview;
UIScrollView *mainscrollview;
BOOL haveimage; }
@property(nonatomic,retain) IBOutlet UILabel *titlelabel;
@property(nonatomic,retain) IBOutlet UILabel *timelabel;
@property(nonatomic,retain) IBOutlet UITextView *contenttextview;
@property(nonatomic,retain)IBOutlet UIScrollView *mainscrollview;
@property(nonatomic,retain) NSString *mynewid;
@property(nonatomic,retain) NSArray *images;
@property(nonatomic) BOOL haveimage; @end

然后在.m文件中声明好各个属性后 将对应的XIB文件中的控件与代码中的变量 建立关联

这边需要解释解释一下几个属性的用处

mynewid的话是由上一级页面 传递过来的新闻ID,我们可以通过该ID从后台获取新闻的详细参数

images的话是用来存储后来获取过来的图片集合。

建立好管理后我们再接着修改.M文件

.m文件的话还需要添加两个头文件

#import "GetWebInfo.h"

#import "Base64AndImageHelp.h"

GetWebInfo的话相信大家都已经知道是什么用的了。如果不知道的话请看前几张,

而Base64AndImageHelp类的话是我自定义的义个类,用来实现将base64的数据转化为Image格式的数据用的(这个会在之后的章节进行介绍)

对于.M文件的话我们只需要修改他的viewDidLoad方法就可以了

具体代码如下

代码相对而言没有什么特别难的地方

唯一有问题的可能就是Base64AndImageHelp部分,不过这部分 大家只要知道他是将后台传递过来的base64的string 图片数据转换成image数据就可以了

- (void)viewDidLoad
{
GetWebInfo *getwebinfo=[GetWebInfo alloc];
NSString *myparameters=[[NSString alloc] initWithString:[NSString stringWithFormat:@"Method=getSingleNewsbyId&new_id=%@",mynewid]];
getwebinfo.parameters=myparameters;
NSString *webReturnMessage=[getwebinfo dogetWebInfo];
NSData* jsonData=[webReturnMessage dataUsingEncoding:NSUTF8StringEncoding];
NSArray *keys = [NSJSONSerialization
JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:nil];
// NSLog(@"%@",keys);
timelabel.text=[[keys objectAtIndex:]valueForKey:@"time"];
titlelabel.text=[[keys objectAtIndex: ]valueForKey:@"title"];
contenttextview.text=[[keys objectAtIndex: ]valueForKey:@"contents"];
NSInteger i=;
if(haveimage)
{
images=[[[keys objectAtIndex: ]valueForKey:@"images"] componentsSeparatedByString:@","];
for (NSString *singleimage in images) {
NSData *newimage=[Base64AndImageHelp mydataWithBase64EncodedString:singleimage];
UIImage *newjiaban=[[UIImage alloc] initWithData:newimage];
UIImageView *imageView = [[UIImageView alloc] init];
[self.mainscrollview addSubview:imageView];
imageView.frame = CGRectMake( ,*i+,,);//left ,top ,width ,height
imageView.image=newjiaban;
i++;
}
}
contenttextview.frame=CGRectMake( ,*i+,,);
mainscrollview.contentSize=CGSizeMake(, +*i);
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}

到了这一步我们已经基本完成了新闻详细信息的浏览了。

最后我们还需要返回到NEWSViewController中 实现UITableView的行点击事件didSelectRowAtIndexPath,

实现点击了新闻标题后,跳转到新闻详细信息页面的效果。

首先需要在NEWSViewController添加SingleNewsInfoViewController的引用。

然后实现didSelectRowAtIndexPath方法,具体代码如下。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SingleNewsInfoViewController *singlenewsinfoViewController= [[SingleNewsInfoViewController alloc]initWithNibName:@"SingleNewsInfoViewController" bundle:nil];
NSString *myid=[[NSString alloc] initWithFormat:@"%@",[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"ID"]];
singlenewsinfoViewController.mynewid=myid;
NSString *haveImage=[[NSString alloc] initWithString:[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"images"]];
if([haveImage isEqual:@"False"])
{
singlenewsinfoViewController.haveimage=NO;
}
else
{
singlenewsinfoViewController.haveimage=YES;
}
singlenewsinfoViewController.title=@"新闻详情";
singlenewsinfoViewController.hidesBottomBarWhenPushed=YES;
[self.navigationController pushViewController:singlenewsinfoViewController animated:YES];
}

OK这样就完成了我们的新闻详细信息浏览的效果

不过这样实现了以后还会有点小BUG ,我会在下一章中进行讲解如何解决该BUG的。

最后再附上两张图片大家也可以自己动手试下,看看BUG在哪里。

      

IOS开发---菜鸟学习之路--(十)-实现新闻详细信息浏览页面的更多相关文章

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

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

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

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

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

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

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

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

  5. IOS开发---菜鸟学习之路--(二十四)-iOS7View被导航栏遮挡问题的解决

    (此文为复制帖,原文地址为:http://blog.sina.com.cn/s/blog_a8192bdd0101af40.html) self.navigationController.naviga ...

  6. IOS开发---菜鸟学习之路--(二十)-二维码扫描功能的实现

    本章将讲解如何实现二维码扫描的功能 首先在github上下载ZBar SDK地址https://github.com/bmorton/ZBarSDK 然后将如下的相关类库添加进去 AVFoundati ...

  7. IOS开发---菜鸟学习之路--(十九)-利用NSUserDefaults存储数据

    利用NSUserDefaults的可以快速的进行本地数据存储,但是支持的格式有限, 至于支持什么格式大家可以再自行脑补 我这边直接讲如何使用 NSUserDefaults 分为两部分 一个是存数据 N ...

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

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

  9. IOS开发---菜鸟学习之路--(十六)-将Image转换为Base64

    我们直接在.m文件的引用头文件部分 和 @interface   AddPictureViewController () 之间  加入 增加部分的代码 然后就可以使用图片转Base64了 #impor ...

  10. IOS开发---菜鸟学习之路--(十五)-如何实现拍照功能

    本章将来讲解下如何实现拍照的功能 我们需要的实现的效果是      好了 直接开始内容吧 首先我们需要新建一个ViewController 就叫AddPictureViewController 然后选 ...

随机推荐

  1. Spring Boot 的配置文件application.properties

    Spring Boot 中的application.properties 是一个全局的配置文件,放在src/main/resources 目录下或者类路径的/config下. 作为全局配置文件的app ...

  2. Mantis-1.3.3 (Ubuntu 16.04)

    平台: Ubuntu 类型: 虚拟机镜像 软件包: mantis-1.3.3 bug tracking commercial devops mantis open-source project man ...

  3. map侧连接

    两个数据集中一个非常小,可以让小数据集存入缓存.在作业开始这些文件会被复制到运行task的节点上. 一开始,它的setup方法会检索缓存文件. 与reduce侧连接不同,Map侧连接需要等待参与连接的 ...

  4. linux常用工具

    命令 功能应用 用法举例 free 查看内存使用情况,包括物理内存和虚拟内存 free -h或free -m vmstat 对系统的整体情况进行统计,包括内核进程.虚拟内存.磁盘.陷阱和 CPU 活动 ...

  5. Linux让Apache支持中文URL图片/文件名

    需要用到iconv_hook和mod_encoding Apache(32位): 安装环境:CentOS 5.6 + Apache 2.2.15 (Apache2.4同样适用) 安装结果:安装后支持“ ...

  6. BZOJ 4541: [Hnoi2016]矿区 平面图转对偶图+DFS树

    4541: [Hnoi2016]矿区 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 433  Solved: 182[Submit][Status][ ...

  7. Android(java)学习笔记76:Handler用法总结 和 秒表案例

    一.Handler的定义: Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用.比如可以用handler发送一个message,然后在handler的线程中 ...

  8. python之道12

    整理今天笔记,课上代码最少敲3遍. 用列表推导式做下列小题 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 l = ['wusir', 'laonanhai', 'aa', 'b', 'tai ...

  9. Drupal7新装一个主题时页面白屏,如何设置一个默认主题?

    问题: 请问我不小心退出登陆了 但这个主题没有登录口 而且之前不知道为什么我其他界面都不能显示内容所以 ?q=user 也不行,怎么办呢?看网上说更换默认主题 去variable表里把默认主题换了,我 ...

  10. 快速下载jar包

    1, http://www.mvnrepository.com 2,可以从spring官网上下载,如果是mvn的话可以通过上面的网址下载