文档章节

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
博文 596
码字总数 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
最简单的点击TabelViewHeaderView展开cell/类似QQ

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

阴雨音语
2016/05/09
43
0
IOS 入门开发之分页栏TabBar的使用(四)

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

彭博
2012/03/09
1K
1
UITableView Section加载问题

我现在有个段代码,是实现类似QQ列表的收缩的功能。可是我只能用tableView的reloadData才可以实现收缩。可是这个收缩拉伸是所有section一起动作。这不是我要的效果啊。 下面是我的自定义hea...

刘_朋
2016/01/28
207
1

没有更多内容

加载失败,请刷新页面

加载更多

中国龙-扬科
23分钟前
0
0
使用apicloud开发移动端APP,IOS list页面滚动卡顿解决记录

给内容容器添加样式:-webkit-overflow-scrolling:touch; -webkit-overflow-scrolling:属性控制元素在移动设备上是否使用滚动回弹效果. auto:使用普通滚动, 当手指从触摸屏上移开,滚动会立即...

万建宁
25分钟前
0
0
Akka消息传送可靠性 23

原文:https://doc.akka.io/docs/akka/2.5/general/message-delivery-reliability.html Akka可帮助您构建可靠的应用程序,这些应用程序在一台计算机中使用多个处理器核心或分布在计算机网络中...

woshixin
47分钟前
2
0
composer安装

前言:随着开源的东西越来越多,一些好的代码我们是可以直接拿过来用的,github更是加快了这一节奏,在github上我们可以看到一些开源的项目、代码块、函数库、类结构等,我们可以直接Fork,然...

echojson
今天
4
0
mysql grant 用户权限总结

用户权限管理主要有以下作用: 1. 可以限制用户访问哪些库、哪些表 2. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作 3. 可以限制用户登录的IP或域名 4. 可以限制用...

Airship
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部