IOS开发---菜鸟学习之路--(八)-实现新闻页面

简介: 本章将具体讲述如何结合前两张的内容最终实现一个新闻页面的雏形 之所以称之为雏形,是因为本章实现的内容只是实现了最基础的效果 还有很多其他诸如下拉刷新 页面导航等效果都需要投入一些时间进行研究  好了直接开始整题吧 首先在我们需要新建一个ViewController 同时呢需要勾选 需要创建X...

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

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

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

 好了直接开始整题吧

首先在我们需要新建一个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 50;
    }
    else
    {
        if([indexPath row]==0)
        {
            return 140;
        }
        else
        {
            return 70;
        }    }
}

 设置好了高度之后,我们就需要实现我们的核心代码了

这当中有部分内容涉及到图片转换的问题,我会在之后的内容中进行讲解的。

这边呢我们需要实现 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:0];
        }
        cell.mylabel.text=[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"title"];
        return cell;
           }
    else
    {
        if([indexPath row]==0)
        {
            // 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:0];
            }
             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:0];
            }
             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今天的内容就这么多了。

感谢观看,另外如果本文有什么问题的话请及时回复,本人会认真修改,以免误人子弟。

 

目录
相关文章
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
22天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
117 66
|
8天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
1月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
2月前
|
安全 IDE Swift
探索iOS开发之旅:从初学者到专家
在这篇文章中,我们将一起踏上iOS开发的旅程,从基础概念的理解到深入掌握核心技术。无论你是编程新手还是希望提升技能的开发者,这里都有你需要的指南和启示。我们将通过实际案例和代码示例,展示如何构建一个功能齐全的iOS应用。准备好了吗?让我们一起开始吧!
|
iOS开发
IOS学习博客不错的大部分是原创
http://blog.csdn.net/iukey/article/category/955062
611 0
|
2月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
35 2
|
2月前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
60 9