Swift基础--使用TableViewController自定义列表
首先建立一个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
- //
- // JieTableViewController.swift
- // JieTableView
- //
- // Created by jiezhang on 14-10-5.
- // Copyright (c) 2014年 jiezhang. All rights reserved.
- //
- import UIKit
- class JieTableViewController: UITableViewController {
- var listVideos : NSMutableArray!
- override func viewDidLoad() {
- super.viewDidLoad()
- var bundle = NSBundle.mainBundle()
- let plistPath : String! = bundle.pathForResource("videos", ofType: "plist")
- listVideos = NSMutableArray(contentsOfFile: plistPath)
- // Uncomment the following line to preserve selection between presentations
- // self.clearsSelectionOnViewWillAppear = false
- // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
- //下面这段话是设置左边编辑,右边添加item
- self.navigationItem.leftBarButtonItem = self.editButtonItem()
- let addButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "insertNewObject:")
- self.navigationItem.rightBarButtonItem = addButton
- }
- func insertNewObject(sender: AnyObject) {
- 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"])
- listVideos.insertObject(item, atIndex: 0)
- let indexPath = NSIndexPath(forRow: 0, inSection: 0)
- self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
- // MARK: - Table view data source
- //返回节的个数
- override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
- // #warning Potentially incomplete method implementation.
- // Return the number of sections.
- return 1
- }
- //返回某个节中的行数
- override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- // #warning Incomplete method implementation.
- // Return the number of rows in the section.
- return listVideos.count
- }
- //为表视图单元格提供数据,该方法是必须实现的方法
- override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
- let cellIdentifier : String = "videoItem"
- let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as JieTableViewCell
- var row = indexPath.row
- var rowDict : NSDictionary = listVideos.objectAtIndex(row) as NSDictionary
- let url : String = rowDict.objectForKey("video_img") as String
- let dataImg : NSData = NSData(contentsOfURL: NSURL(string : url))
- cell.JieVideoImg.image = UIImage(data: dataImg)
- cell.JieVideoTitle.text = rowDict.objectForKey("video_title") as? String
- cell.JieVideoSubTitle.text = rowDict.objectForKey("video_subTitle") as? String
- return cell
- }
- override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
- }
- // 支持单元格编辑功能
- override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
- // Return NO if you do not want the specified item to be editable.
- return true
- }
- // Override to support editing the table view.
- override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
- if editingStyle == .Delete {
- // Delete the row from the data source
- listVideos.removeObjectAtIndex(indexPath.row)
- tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
- } else if editingStyle == .Insert {
- // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
- }
- }
- // Override to support rearranging the table view.
- override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {
- if fromIndexPath != toIndexPath{
- var object: AnyObject = listVideos.objectAtIndex(fromIndexPath.row)
- listVideos.removeObjectAtIndex(fromIndexPath.row)
- if toIndexPath.row > self.listVideos.count{
- self.listVideos.addObject(object)
- }else{
- self.listVideos.insertObject(object, atIndex: toIndexPath.row)
- }
- }
- }
- // Override to support conditional rearranging of the table view.
- //在编辑状态,可以拖动设置item位置
- override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
- // Return NO if you do not want the item to be re-orderable.
- return true
- }
- // MARK: - Navigation
- //给新进入的界面进行传值
- override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
- if segue.identifier == "showDetail" {
- if let indexPath = self.tableView.indexPathForSelectedRow() {
- let object : NSDictionary = listVideos[indexPath.row] as NSDictionary
- (segue.destinationViewController as JieDetailViewController).detailItem = object
- }
- }
- }
- }
JieTableViewCell.swift
- //
- // JieTableViewCell.swift
- // JieTableView
- //
- // Created by jiezhang on 14-10-5.
- // Copyright (c) 2014年 jiezhang. All rights reserved.
- //
- import UIKit
- class JieTableViewCell: UITableViewCell {
- @IBOutlet weak var JieVideoImg: UIImageView!
- @IBOutlet weak var JieVideoTitle: UILabel!
- @IBOutlet weak var JieVideoSubTitle: UILabel!
- override func awakeFromNib() {
- super.awakeFromNib()
- // Initialization code
- }
- override func setSelected(selected: Bool, animated: Bool) {
- super.setSelected(selected, animated: animated)
- }
- }
JieDetailViewController.swift
- //
- // JieDetailViewController.swift
- // JieTableView
- //
- // Created by jiezhang on 14-10-5.
- // Copyright (c) 2014年 jiezhang. All rights reserved.
- //
- import UIKit
- class JieDetailViewController: UIViewController {
- @IBOutlet var big_video_img: UIImageView!
- //接受传进来的值
- var detailItem: NSDictionary?
- func configureView() {
- if let detail : NSDictionary = self.detailItem {
- self.title = detail.objectForKey("video_title") as? String
- let url : String = detail.objectForKey("video_img") as String
- let dataImg : NSData = NSData(contentsOfURL: NSURL(string : url))
- self.big_video_img.image = UIImage(data: dataImg)
- }
- }
- override func viewDidLoad() {
- super.viewDidLoad()
- configureView()
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
- // MARK: - Navigation
- override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
- }
- }
源码地址:https://github.com/jwzhangjie/JieTableView
Swift基础--使用TableViewController自定义列表的更多相关文章
- Android零基础入门第39节:ListActivity和自定义列表项
原文:Android零基础入门第39节:ListActivity和自定义列表项 相信通过前两期的学习,以及会开发最简单的一些列表界面了吧,那么本期接着来学习更多方法技巧. 一.使用ListActivi ...
- 2.html基础标签:无序+有序+自定义列表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Bootstrap <基础二十八>列表组
列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...
- WPF界面设计技巧(4)—自定义列表项样式
原文:WPF界面设计技巧(4)-自定义列表项样式 有前面修改按钮样式的基础,我们可以尝试来定制一个即好看又好用的 ListBox ,今天先来讲“好看”部分. 打开 Microsoft Visual S ...
- jqgrid自定义列表开发=》实现高级查询
标题已指出本文要说的三件事,首先是主角jqgrid,将应用在自定义列表中,重点介绍如何实现高级查询. 使用jqgrid实现自定义列表分为两大步骤,首先是要根据业务完成jqgrid的对象定义,即列表的描 ...
- swift基础:第六部分:类与对象
http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...
- swift基础:第二部分:函数和闭包
今天本来想利用上午的时间本来打算将swift基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于 ...
- Swift基础语法学习总结(转)
Swift基础语法学习总结 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...
- SharePoint 2013开发入门探索(一)- 自定义列表
在SharePoint 2013中创建自定义列表的方式有很多,在网站内容页面添加应用程序就可以创建(站点内容-〉 您的应用程序),也可以通过SharePoint Designer 2013创建,而本文 ...
随机推荐
- WAS集群系列(6):集群搭建:步骤4:安装WAS升级软件
逐步点击"下一步",注意一处流程,例如以下列举: "升级软件"安装的路径设置,建议与之前的WAS及IHS安装的绝对路径同样,例如以下所看到的: 逐步点击,完毕安 ...
- io系统
一.浅谈io系统 io系统的结构化思想是:输入-转换流-装饰器-输出. 对于字节流来说,常见的结构类为: package com.handchina.yunmart.middleware.servic ...
- unbantu相关笔记
很多项目使用的系统是centos或者redhat,最近有一个项目使用的系统竟然是阿里云unbantu,不知道他们负责人怎么想的,明明有centos,非要用unbantu.抱怨到此,unbantu的学习 ...
- centos6.5配置无线网络
由于安装的是服务器版,所以开机无法连接网络,以下这些情况都是针对驱动已经安装OK.按步骤操作如下(以下操作默认都是在超级管理员权限下进行): 1.测试电脑是否安装wpa_supplicant,测试方法 ...
- 使用xdebug+eclipse远程调试centOS7上的PHP代码
这两天一直在研究PHP代码的调试,原来开发一直用的var_dump,麻烦! 最近发现能使用xdebug+eclipse远程单步调试PHP,但是百度后实现此技术的文章都写得不够具体. 我照着这里零散的文 ...
- javascript紧接上一张for循环的问题,我自己的理解
这类问题,通常都是在for循环里,根据i的变化作为dom的下标来作当前dom的点击事件, 预期是,每个点击事件都对应相应的i下标,但是问题是,每次点击的都是最后一次节点的dom. 原因就是其实我们作点 ...
- 第一次用IIS发布网站时遇到的两个问题
1. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 无法识别的属性“targetFramework”.请注意属性 ...
- (转)Windows Server 2008 默认"照片库查看器" 无法打开图片, 只能用画图程序打开
1.解决[启用Win2008照片查看器] Win2008 中放了一些图片,本来以为可以象Win7那样直接用“照片查看器”打开,可是Win2008默认竟然是用“画图”打开的,非常不方便. 再仔细一看,“ ...
- CaseFile
出处 http://tools.kali.org/information-gathering/casefile CaseFile is the little brother to Maltego. I ...
- java NumberForMate的使用
有时候我们需要将数字转化为字符串,并且转化后的长度要一定.比如00012这种类型.这时候我们就可以使用NumberForMate这个方法: NumberFormat numberFormat = Nu ...