文档章节

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

hejunbinlan
 hejunbinlan
发布于 2015/06/24 14:37
字数 814
阅读 717
收藏 0
点赞 0
评论 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
粉丝 40
博文 578
码字总数 21362
作品 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 入门开发之分页栏TabBar的使用(四)

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

彭博
2012/03/09
1K
1
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
如何 iPad 编程中使用自定义 TableViewCell

UITableViewCell类能够显示出各种各样的风格,但有时候我们需要适应不同的显示模式下的显示。今天的文章中,我们将使用table view去显示一系列自定义的cell。 启动Xcode,选择"Create a new...

junwong
2012/08/26
2.6K
3
UITableView Section加载问题

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

刘_朋
2016/01/28
199
1
15个快速学习苹果Swift编程语言的入门教程

要说今年最火的编程语言是什么。那就非Swift莫属了。当然最主要还是市场炒的比较热,加上官方Swift教程《The Swift Programming Language》在北航的大三学生发起在github上进行协同翻译获得了...

欲思
2014/07/24
19.5K
7
关于“幽灵架构”的补充说明5:改造控制器

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

cg1991130
2016/05/12
0
0
SweetAlert/弹框

OC版没有自定义图片功能 OC版本Demo演示点此下载.(OC调用Swift) 特别声明感谢:BadBoy 直接通过桥接调用这个用Swift写的类,只能使用最基础的弹框. 我的能力不足无法扩展, 还好搜到了这位大神为...

阴雨音语
2016/04/12
84
0
swift4,网络请求工具Moya

在OC中,我们使用AFNetworking来进行网络请求,简洁方便。在swift中,我们使用Moya来进行网络请求,Moya封装了Alamofire,可以更加方便的进行网络请求。初次使用Moya,还是觉得稍稍有些不习惯...

小曼Study
05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
2
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部