文档章节

Swift基础--使用TableViewController自定义列表

hejunbinlan
 hejunbinlan
发布于 2015/06/24 14:37
字数 814
阅读 719
收藏 0

首先建立一个swift项目,把storyboard的内容删掉,添加一个Navigation Controller,然后设置storyboard对应界面的class,在Navigation Controller界面设置View Controller的is initial View Controller,这里使用的自定义列表内容,所以要新建一个继承UITableViewCell的类,然后设置storyboard中Table View的Prototype Cells的class,对于点击item进入详情界面,使用TableView 中的prepareForSegue方法。

JieTableViewController.swift

[objc]  view plain copy print ?
  1. //  
  2. //  JieTableViewController.swift  
  3. //  JieTableView  
  4. //  
  5. //  Created by jiezhang on 14-10-5.  
  6. //  Copyright (c) 2014年 jiezhang. All rights reserved.  
  7. //  
  8.   
  9. import UIKit  
  10.   
  11. class JieTableViewController: UITableViewController {  
  12.   
  13.     var listVideos : NSMutableArray!  
  14.       
  15.     override func viewDidLoad() {  
  16.         super.viewDidLoad()  
  17.         var bundle = NSBundle.mainBundle()  
  18.         let plistPath : String! = bundle.pathForResource("videos", ofType"plist")  
  19.         listVideos = NSMutableArray(contentsOfFile: plistPath)  
  20.         // Uncomment the following line to preserve selection between presentations  
  21.         // self.clearsSelectionOnViewWillAppear = false  
  22.           
  23.         // Uncomment the following line to display an Edit button in the navigation bar for this view controller.  
  24.         //下面这段话是设置左边编辑,右边添加item  
  25.           
  26.         self.navigationItem.leftBarButtonItem = self.editButtonItem()  
  27.         let addButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, targetself, action"insertNewObject:")  
  28.         self.navigationItem.rightBarButtonItem = addButton  
  29.           
  30.     }  
  31.   
  32.     func insertNewObject(sender: AnyObject) {  
  33.         var item : NSDictionary = NSDictionary(objects:["http://c.hiphotos.baidu.com/video/pic/item/f703738da977391224eade15fb198618377ae2f2.jpg","新增数据", NSDate.date().description] , forKeys: ["video_img","video_title","video_subTitle"])  
  34.         listVideos.insertObject(item, atIndex0)  
  35.         let indexPath = NSIndexPath(forRow: 0, inSection0)  
  36.         self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation.Automatic)  
  37.     }  
  38.       
  39.   
  40.     override func didReceiveMemoryWarning() {  
  41.         super.didReceiveMemoryWarning()  
  42.         // Dispose of any resources that can be recreated.  
  43.     }  
  44.   
  45.     // MARK: - Table view data source  
  46.     //返回节的个数  
  47.     override func numberOfSectionsInTableView(tableView: UITableView) -> Int {  
  48.         // #warning Potentially incomplete method implementation.  
  49.         // Return the number of sections.  
  50.         return 1  
  51.     }  
  52.     //返回某个节中的行数  
  53.     override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {  
  54.         // #warning Incomplete method implementation.  
  55.         // Return the number of rows in the section.  
  56.         return listVideos.count  
  57.     }  
  58.     //为表视图单元格提供数据,该方法是必须实现的方法  
  59.     override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {  
  60.         let cellIdentifier : String = "videoItem"  
  61.         let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as JieTableViewCell  
  62.         var row = indexPath.row  
  63.         var rowDict : NSDictionary = listVideos.objectAtIndex(row) as NSDictionary  
  64.         let url : String = rowDict.objectForKey("video_img") as String  
  65.         let dataImg : NSData = NSData(contentsOfURL: NSURL(string : url))  
  66.         cell.JieVideoImg.image = UIImage(data: dataImg)  
  67.         cell.JieVideoTitle.text = rowDict.objectForKey("video_title") as? String  
  68.         cell.JieVideoSubTitle.text = rowDict.objectForKey("video_subTitle") as? String  
  69.         return cell  
  70.   
  71.     }  
  72.       
  73.     override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {  
  74.   
  75.     }  
  76.       
  77.     // 支持单元格编辑功能  
  78.     override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {  
  79.         // Return NO if you do not want the specified item to be editable.  
  80.         return true  
  81.     }  
  82.       
  83.     // Override to support editing the table view.  
  84.     override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {  
  85.         if editingStyle == .Delete {  
  86.             // Delete the row from the data source  
  87.             listVideos.removeObjectAtIndex(indexPath.row)  
  88.             tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation.Fade)  
  89.         } else if editingStyle == .Insert {  
  90.             // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view  
  91.         }      
  92.     }  
  93.   
  94.       
  95.     // Override to support rearranging the table view.  
  96.     override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {  
  97.         if fromIndexPath != toIndexPath{  
  98.             var object: AnyObject = listVideos.objectAtIndex(fromIndexPath.row)  
  99.             listVideos.removeObjectAtIndex(fromIndexPath.row)  
  100.             if toIndexPath.row > self.listVideos.count{  
  101.                 self.listVideos.addObject(object)  
  102.             }else{  
  103.                 self.listVideos.insertObject(object, atIndex: toIndexPath.row)  
  104.             }  
  105.         }  
  106.     }  
  107.       
  108.   
  109.       
  110.     // Override to support conditional rearranging of the table view.  
  111.     //在编辑状态,可以拖动设置item位置  
  112.     override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {  
  113.         // Return NO if you do not want the item to be re-orderable.  
  114.         return true  
  115.     }  
  116.       
  117.   
  118.       
  119.     // MARK: - Navigation  
  120.   
  121.     //给新进入的界面进行传值  
  122.     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {  
  123.         if segue.identifier == "showDetail" {  
  124.             if let indexPath = self.tableView.indexPathForSelectedRow() {  
  125.                 let object : NSDictionary = listVideos[indexPath.row] as NSDictionary  
  126.                 (segue.destinationViewController as JieDetailViewController).detailItem = object  
  127.             }  
  128.         }  
  129.     }  
  130.   
  131.       
  132.       
  133.   
  134. }  


JieTableViewCell.swift

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  JieTableViewCell.swift  
  3. //  JieTableView  
  4. //  
  5. //  Created by jiezhang on 14-10-5.  
  6. //  Copyright (c) 2014年 jiezhang. All rights reserved.  
  7. //  
  8.   
  9. import UIKit  
  10.   
  11. class JieTableViewCell: UITableViewCell {  
  12.   
  13.     @IBOutlet weak var JieVideoImg: UIImageView!  
  14.     @IBOutlet weak var JieVideoTitle: UILabel!  
  15.     @IBOutlet weak var JieVideoSubTitle: UILabel!  
  16.       
  17.     override func awakeFromNib() {  
  18.         super.awakeFromNib()  
  19.         // Initialization code  
  20.     }  
  21.   
  22.     override func setSelected(selected: Bool, animated: Bool) {  
  23.         super.setSelected(selected, animated: animated)  
  24.           
  25.      
  26.     }  
  27.   
  28. }  
JieDetailViewController.swift
[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  JieDetailViewController.swift  
  3. //  JieTableView  
  4. //  
  5. //  Created by jiezhang on 14-10-5.  
  6. //  Copyright (c) 2014年 jiezhang. All rights reserved.  
  7. //  
  8.   
  9. import UIKit  
  10.   
  11. class JieDetailViewController: UIViewController {  
  12.       
  13.   
  14.     @IBOutlet var big_video_img: UIImageView!  
  15.     //接受传进来的值  
  16.     var detailItem: NSDictionary?  
  17.       
  18.       
  19.     func configureView() {  
  20.         if let detail : NSDictionary = self.detailItem {  
  21.             self.title = detail.objectForKey("video_title") as? String  
  22.             let url : String = detail.objectForKey("video_img") as String  
  23.             let dataImg : NSData = NSData(contentsOfURL: NSURL(string : url))  
  24.             self.big_video_img.image = UIImage(data: dataImg)  
  25.         }  
  26.     }  
  27.       
  28.     override func viewDidLoad() {  
  29.         super.viewDidLoad()  
  30.         configureView()  
  31.     }  
  32.   
  33.     override func didReceiveMemoryWarning() {  
  34.         super.didReceiveMemoryWarning()  
  35.         // Dispose of any resources that can be recreated.  
  36.     }  
  37.   
  38.     // MARK: - Navigation  
  39.     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {  
  40.          
  41.     }  
  42.   
  43. }  







源码地址:https://github.com/jwzhangjie/JieTableView

本文转载自:http://blog.csdn.net/jwzhangjie/article/details/40227553

共有 人打赏支持
hejunbinlan
粉丝 41
博文 586
码字总数 21569
作品 0
浦东
高级程序员
私信 提问
Swift教程17-淡化MVC,使用MVVM框架开发轻巧便于维护的iOS app

Swift教程17-淡化MVC,使用MVVM框架开发轻巧便于维护的iOS/android app MVVM是微软提出一种移动开发框架,旨在针对传统的MVC框架,解决传统的MVC框架的控制器的臃肿问题. M: Model模型,也就是数...

法斗斗
2015/09/25
625
0
IOS开发笔记(Swift):UITableView表格视图的静态使用

最近一段时间都在准备IOS的开发,学习swift语言,之前做过很多类型的开发:前端、Java Web、.net、Android等,IOS是第一次接触,很不适应,学习的进度也比较慢,不过在看过一些视频、几本pdf...

Realfighter
2016/06/23
505
0
IOS 入门开发之分页栏TabBar的使用(四)

IOS 入门开发之分页栏TabBar的使用 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6905633 一般TableBar放置在屏幕的最...

彭博
2012/03/09
1K
1
最简单的点击TabelViewHeaderView展开cell/类似QQ

我学习花一天 你 仅需一刻钟 我需要一天 因为笨 你只需一刻钟 因为我笨 Swift/OC演示点此下载 学自:cjq002 原址:https://github.com/cjq002/TableViewController-ShowOrHide-Section-row...

阴雨音语
2016/05/09
43
0
关于“幽灵架构”的补充说明5:改造控制器

Swift中的泛型有非常多的用处,除了我在之前介绍的方法中作为占位符之外,还可以被用在协议中,构成一个泛型协议,那么遵守这个泛型协议的成员就会变成泛型成员。还用我们之前的事件节日提醒...

cg1991130
2016/05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

(三)Honghu Cloud云架构一定时调度平台

2018-11-16 14:45:08 产品简介 鸿鹄云架构是一个完全由Java编写的开源任务调度框架,为企业在任务调度提供了简单却强大的机制。开发人员根据业务规则,使用调度平台简单配置,就可以让任务在...

itcloud
7分钟前
0
0
护航Lazada双11购物节 阿里云CDN全球化火力全开

摘要: Lazada是东南亚最大B2C平台,业务范围覆盖印度尼西亚、马来西亚、菲律宾、新加坡、泰国和越南六个东南亚国家,覆盖大约6亿消费者。在双11期间,阿里云CDN为Lazada电商内容加速,并且通...

阿里云官方博客
7分钟前
1
0
常用设计模式之代理模式解析

1. 简介 代理模式(Proxy Pattern)是常用设计模式之一。代理模式的定义:Provide a surrogate or placeholder for another object to controlaccess to it(为其他对象提供一种代理以控制对这个...

老道士
8分钟前
0
0
Vue瀑布流插件的使用示例

我自己写的一个的Vue瀑布流插件,列数自适应,不用设置每个卡片的高度。 测试页面:Page.vue 模板页面:WaterFollow.vue 和 WFColumn.vue 在Page.vue中,修改itemW的值,设置每列的最小宽度。...

peakedness丶
8分钟前
1
0
多种负载均衡算法及其Java代码实现【网络上较好的转载】

首先给大家介绍下什么是负载均衡(来自百科) 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展 网络设备和 服务器的带宽、增加 吞吐量、加强网络数据处理能力、提高网...

stys352
12分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部