Models: UserModel.swift

Views: UserInfoCell.swift

Controllers: RootViewController.swift, DetailViewController.swift

AppDelegate.swift:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary? ) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
//
let rootController = RootViewController(style: UITableViewStyle.Plain)
let rootNav = UINavigationController(rootViewController: rootController)
self.window!.rootViewController = rootNav
//
self.window!.backgroundColor = UIColor.whiteColor()
self.window!.makeKeyAndVisible()
return true
}
}

UserModel.swift

import Foundation

//
// @brief The model of user, using to store user datas
// @author huangyibiao
//
class UserModel : NSObject {
var userName: String ///< store user's name, optional
var userID: Int ///< store user's ID
var phone: String? ///< store user's telephone number
var email: String? ///< store user's email // designated initializer
init(userName: String, userID: Int, phone: String?, email: String?) {
self.userName = userName
self.userID = userID
self.phone = phone
self.email = email super.init()
}
}

UserInfoCell.swift:

import Foundation
import UIKit //
// @brief The cell of showing user infos
// @author huangyibiao
//
class UserInfoCell : UITableViewCell {
var userNameLabel : UILabel!
var phoneLabel : UILabel!
var emailLabel : UILabel! init(style: UITableViewCellStyle, reuseIdentifier: String!) {
super.init(style: style, reuseIdentifier: reuseIdentifier) userNameLabel = UILabel(frame: CGRectMake(30, 0, 100, 44))
userNameLabel.backgroundColor = UIColor.clearColor()
userNameLabel.font = UIFont.systemFontOfSize(14)
self.contentView.addSubview(userNameLabel) phoneLabel = UILabel(frame: CGRectMake(120, 0, 200, 20))
phoneLabel.backgroundColor = UIColor.clearColor()
phoneLabel.font = UIFont.systemFontOfSize(12)
self.contentView.addSubview(phoneLabel) emailLabel = UILabel(frame: CGRectMake(120, 20, 200, 20))
emailLabel.backgroundColor = UIColor.clearColor()
emailLabel.font = UIFont.systemFontOfSize(12)
self.contentView.addSubview(emailLabel)
} func configureCell(userModel: UserModel?) {
if let model = userModel {
userNameLabel.text = model.userName
phoneLabel.text = model.phone
emailLabel.text = model.email
}
}
}

RootViewController.swift:

import Foundation
import UIKit //
// @brief 作为窗体的rootViewControllor
// @author huangyibiao
// class RootViewController : UITableViewController, DetailViewControllerDelegate {
var dataSource = NSMutableArray()
var currentIndexPath: NSIndexPath? override func viewDidLoad() {
super.viewDidLoad() for index in 0...12 {
let model = UserModel(userName: "name:\(index + 1)",
userID: index, phone: "13877747982", email: "632840804@qq.com")
dataSource.addObject(model)
} self.title = "UITableViewDemo"
} override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return dataSource.count
} override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
// can't use static? let cellIdentifier: String = "UserInfoCellIdentifier"
// may be no value, so use optional
var cell: UserInfoCell? = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? UserInfoCell if cell == nil { // no value
cell = UserInfoCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellIdentifier)
} let model: UserModel? = dataSource[indexPath.row] as? UserModel
cell!.configureCell(model) return cell
} override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
let detail = DetailViewController()
detail.userModel = dataSource[indexPath.row] as? UserModel
detail.delegate = self
currentIndexPath = indexPath
self.navigationController.pushViewController(detail, animated: true)
} func changeItem(forUserModel userModel: UserModel?) {
var index = 0
for index = 0; index < dataSource.count; index++ {
let model = dataSource[index] as UserModel
if model.userID == userModel?.userID {
model.phone = userModel? .phone
model.email = userModel?.email
tableView.reloadRowsAtIndexPaths([currentIndexPath!], withRowAnimation: UITableViewRowAnimation.Fade)
break
}
}
}
}

DetailViewController.swift:

import Foundation
import UIKit // this delegate needs a @objc, because @optional is only for objective-c, not for swift
@objc protocol DetailViewControllerDelegate : NSObjectProtocol {
@optional func changeItem(forUserModel userModel: UserModel?)
} class DetailViewController : UIViewController {
var userModel: UserModel?
var delegate: DetailViewControllerDelegate? override func viewDidLoad() {
super.viewDidLoad() self.view.backgroundColor = UIColor.whiteColor()
self.title = userModel? .userName let button = UIButton(frame: CGRectMake(10, 200, 300, 40))
button.setTitle("change", forState:UIControlState.Normal)
button.backgroundColor = UIColor.redColor()
button.addTarget(self, action: "onChangeButtonClick:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(button)
} func onChangeButtonClick(sender: UIButton!) {
if userModel {
userModel!.userName = "ChangeName" // changeItem needs to add a ? to the end, before (), because
// this function is optional
// delegate? 表示可能没有代理。而changeItem? 表示方法可能没有实现,这样写就算没有实现也没有问题
delegate?.changeItem? (forUserModel: userModel)
self.navigationController.popViewControllerAnimated(true)
}
}
}

效果图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd29haWZlbjMzNDQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Swift UI学习UITableView and protocol use的更多相关文章

  1. 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(六)Picker View视图 学习笔记

    想对PickerView进行操作,只能在代码中操作. 下面 ,再添加三个label组件,然后将所有组件配置到代码中(看代码),然后要实现对PickerView的操作,就要实现它的DataSource协 ...

  2. Swift UI

    概述 Apple近日发布了Swift编程语言,Swift是供iOS和OS X应用编程的新编程语言.相信很多开发者都在学习这门新语言.   废话不多说,下面我就来学习使用Swift创建一个简单的UI应用 ...

  3. Swift UI开发初探

    今天凌晨Apple刚刚发布了Swift编程语言,Swift是供iOS和OS X应用编程的新编程语言.相信很多开发者都在学习这门新语言. 废话不多说,下面我就来学习使用Swift创建一个简单的UI应用程 ...

  4. Swift开发学习(一):初始篇

    http://blog.csdn.net/powerlly/article/details/29351103 Swift开发学习:初始篇 关于 苹果公司于WWDC2014(Apple Worldwid ...

  5. 一份关于Swift语言学习资源的整理文件

    一份关于Swift语言学习资源的整理文件     周银辉 在这里下载 https://github.com/ipader/SwiftGuide

  6. Swift入门学习之一常量,变量和声明

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/6059421.html Swift入门学习之一常量,变量和 ...

  7. iOS开发UI篇—UITableview控件简单介绍

    iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...

  8. iOS开发UI篇—UITableview控件基本使用

    iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...

  9. iOS开发UI篇—UITableview控件使用小结

    iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...

随机推荐

  1. cf 323A A. Black-and-White Cube 立体构造

    A. Black-and-White Cube time limit per test 1 second memory limit per test 256 megabytes input stand ...

  2. hdu1500 (排序+单调队列优化 )

    从n根筷子里面, 选择k+8个集合的筷子,每个集合三根筷子, A<=B<=C, 费用是(A-B)^2, 问最小的费用是多少. 将n根筷子排序之后,可以知道A和B的下标一定是连续的. 比如有 ...

  3. 并查集专辑 (poj1182食物链,hdu3038, poj1733, poj1984, zoj3261)

    并查集专题训练地址,注册登录了才能看到题目 并查集是一个树形的数据结构,  可以用来处理集合的问题, 也可以用来维护动态连通性,或者元素之间关系的传递(关系必须具有传递性才能有并查集来维护,因为并查集 ...

  4. 【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(二)

    4 三维 4.1 共享三维场景         用户能够将ArcScene文档导出为3D web场景,能够被加载到ArcGIS Online.Portal或本地Web服务器上并进行分享.这样,用户可以 ...

  5. POJ1502(Dijkstra)

    MPI Maelstrom Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5538   Accepted: 3451 题目链 ...

  6. IAR FOR ARM 各版本号,须要的大家能够收藏了

    首先感谢大家的支持与关注,如今应该又一次编辑这篇文章了,这篇文章是非常久曾经不知在什么地方Copy过来的, 非常多问题不知怎么解决,如今我用的是KEIL for arm. 用过Keil和IAR,个人感 ...

  7. WPF命令參数CommandParameter

    XAML代码例如以下: <Window x:Class="Demo006.MainWindow" xmlns="http://schemas.microsoft.c ...

  8. Effective C++:规定20: 宁pass-by-reference-to-const更换pass-by-value

    (一) 假设传递参数当函数被调用pass-by-value,然后函数的参数是基于实际参数的副本最初值,调用,也得到该函数返回的结束值复印件. 请看下面的代码: class Person { publi ...

  9. Ubuntu 13.10 安装 Unity 8 试用截图

    关于 Unity 8 有很多报道,Unity 8 相对于 Unity 7 变化相当大,这是 Ubuntu 团队打造的一款通用于 PC.手机.平板的桌面. Unity 8 已经登陆 ubuntu 13. ...

  10. 【Leetcode】Pascal&#39;s Triangle II

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...