swift 新闻列表实现
2016-05-07 18:43
489 查看
这个例子综合了前面两篇,利用oc框架和自定义cell,做出一个新闻列表出来,顺便补充一下上篇漏掉的一下东西、
效果图
这个例子很典型,大致分为下面几个步骤实现:
1、网络请求
2、json解析
3、自定义cell填充数据
4、点击cell跳转至webview
其实前面几步前面几篇博客已经说过了,不过有一个地方需要注意一下,json解析若有数组在里面,需要重写NSObject类中一个方法、
1、网络请求&json解析
现在来看看实体类
result字段是一个数组,并且里面是一个对象,这个时候需要告诉mj框架,数组中存的是什么对象
override static func mj_objectClassInArray() -> [NSObject : AnyObject]! {
return [“result”: New.self]
}
所以重写这个方法,(写法和oc的区别很大、试了好多才成功~-~)
这么一来,数据就是得到了,并且赋值给成员变量arrays,然后tableview重新装填数据。
2、xib自定义cell
xib自定义cell是一个挺不错的选择,不需要自己去计算坐标,可以利用到自动布局的好处,在每个cell高度一样的情况下,是一个很不错的选择、(高度自适应其实也行,不过毕竟麻烦就是)
多用用自动布局,感觉蛮好的、布局就自个看着办啦
把xib文件弄好了,就新建个类继承uitableviewcell,然后把这个类配置给xib、开始连线~~~
下面在tableview里面使用xib
=、= 这里image有个方法sd_setImageWithURL、这个是sdimageload框架的方法,用于显示图片,引入oc第三方库的方法前面已经说过了
这里需要注意的是导包的问题,我们这里只需要用image的方法,所以我们导入image 的分类头文件就好了
如此,列表就显示出来了
3、跳转至webview
涉及到了界面的传值问题,ios还是比Android好的多啊,不需要迷之intent~~~~
因为你要push之前,是需要新建这个类的、那既然类的实例都有了,自然想怎么搞就这么搞~~~
只需要新建一个实体类对象就好,然后在cell点击事件那里赋值
新建这个类,把对象塞进去就好了~~、so easy
效果图
这个例子很典型,大致分为下面几个步骤实现:
1、网络请求
2、json解析
3、自定义cell填充数据
4、点击cell跳转至webview
其实前面几步前面几篇博客已经说过了,不过有一个地方需要注意一下,json解析若有数组在里面,需要重写NSObject类中一个方法、
1、网络请求&json解析
let manager = AFHTTPSessionManager() let ceshi = "习近平" let encode = ceshi.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) let url = "http://op.juhe.cn/onebox/news/query?key=f75b0b456907bb042290c9a838e71f3e&q="+encode! tableview.rowHeight = 100 manager.GET(url, parameters: nil, success: { ( datatask :NSURLSessionDataTask, object :AnyObject?) in //回调在主线程,这里可以去做ui操作 let weat = NewsBean.mj_objectWithKeyValues(object) NSLog("请求成功"+weat.reason ) self.arrays = weat.result NSLog("----%@", NSThread.currentThread() ) self.tableview.reloadData() },failure: { (datask, object) in NSLog("请求失败%@",object) })
现在来看看实体类
class NewsBean: NSObject { var reason : String! var error_code : NSNumber! var result : Array<New>! //数组必须这么做!! override static func mj_objectClassInArray() -> [NSObject : AnyObject]! { return ["result": New.self] } class New: NSObject { var title :String! var content :String! var img_width :String! var full_title :String! var pdate :String! var src :String! var img_length :String! var img :String! var url :String! var pdate_src :String! } }
result字段是一个数组,并且里面是一个对象,这个时候需要告诉mj框架,数组中存的是什么对象
override static func mj_objectClassInArray() -> [NSObject : AnyObject]! {
return [“result”: New.self]
}
所以重写这个方法,(写法和oc的区别很大、试了好多才成功~-~)
这么一来,数据就是得到了,并且赋值给成员变量arrays,然后tableview重新装填数据。
2、xib自定义cell
xib自定义cell是一个挺不错的选择,不需要自己去计算坐标,可以利用到自动布局的好处,在每个cell高度一样的情况下,是一个很不错的选择、(高度自适应其实也行,不过毕竟麻烦就是)
多用用自动布局,感觉蛮好的、布局就自个看着办啦
把xib文件弄好了,就新建个类继承uitableviewcell,然后把这个类配置给xib、开始连线~~~
class NewsCell: UITableViewCell { @IBOutlet weak var iconview: UIImageView! @IBOutlet weak var timeview: UILabel! @IBOutlet weak var scrouseview: UILabel! @IBOutlet weak var contentlableview: UILabel! @IBOutlet weak var titlelableview: UILabel! override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } }
下面在tableview里面使用xib
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { //注意名字要和xib文件的名字一致! let nsarray : NSArray = NSBundle.mainBundle().loadNibNamed("news", owner: nil, options: nil) let cell : NewsCell = nsarray.lastObject as! NewsCell let news = arrays[indexPath.row] let htmlstring = news.content let attrstring = try! NSAttributedString(data: htmlstring.dataUsingEncoding(NSUnicodeStringEncoding)! , options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) cell.titlelableview.text = news.full_title cell.contentlableview.numberOfLines=2 cell.contentlableview.attributedText = attrstring cell.scrouseview.text = news.src cell.timeview.text = news.pdate NSLog("图片url"+news.img) cell.iconview.sd_setImageWithURL(NSURL(string:news.img)) return cell }
=、= 这里image有个方法sd_setImageWithURL、这个是sdimageload框架的方法,用于显示图片,引入oc第三方库的方法前面已经说过了
这里需要注意的是导包的问题,我们这里只需要用image的方法,所以我们导入image 的分类头文件就好了
如此,列表就显示出来了
3、跳转至webview
涉及到了界面的传值问题,ios还是比Android好的多啊,不需要迷之intent~~~~
因为你要push之前,是需要新建这个类的、那既然类的实例都有了,自然想怎么搞就这么搞~~~
class NewsDetailController: UIViewController { var newbean: NewsBean.New! override func viewDidLoad() { super.viewDidLoad() navigationItem.title = newbean.title let webview = UIWebView() webview.frame = CGRectMake(0, 0, view.frame.width , view.frame.height) webview.loadRequest(NSURLRequest(URL: NSURL(string: newbean.url)!)) view.addSubview(webview) // Do any additional setup after loading the view. } }
只需要新建一个实体类对象就好,然后在cell点击事件那里赋值
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { NSLog("点击了第几项%d", indexPath.row) //跳转到webview显示数据!,利用navigation来实现跳转 let detail = NewsDetailController () detail.newbean = arrays[indexPath.row] self.navigationController?.pushViewController(detail, animated: true) }
新建这个类,把对象塞进去就好了~~、so easy
相关文章推荐
- Apple Swift学习教程
- 新注册
- 介绍 Fedora 上的 Swift
- Clinews:从命令行阅读新闻和最新头条
- 插件管理框架 for Delphi(一)
- 四大漏洞入侵博客
- 使用CSS框架布局的缺点和优点小结
- 在Ubuntu系统上安装Ghost博客平台的教程
- 一起动手编写Android图片加载框架
- 基于.NET平台常用的框架和开源程序整理
- 列举PHP的Yii 2框架的开发优势
- Windows窗体的.Net框架绘图技术实现方法
- 浅谈JavaScript 框架分类
- 轻量级javascript 框架Backbone使用指南
- javascript实现框架高度随内容改变的方法
- JS刷新框架外页面七种实现代码
- 超赞的动手创建JavaScript框架的详细教程
- 深入探讨前端框架react
- 简单介绍不用库(框架)自己写ajax