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. POJ 3286 How many 0&#39;s?

    题目大意: 计算[m,n]之间全部数字有多少个零. 解题思路: 能够用[0,m)之间和[0,n]之间有多少个零然后作差. 规律是计算全部位置在到当前数时有多少个零. 以下是代码:   #include ...

  2. 提高SQL执行效率

    原文地址:http://www.cnblogs.com/hlxs/archive/2012/05/07/2487082.html 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ...

  3. ecshop首页调用指定分类的所有产品(指定一级调二级)

    第一种方法 第一 在/includes/lib_goods.php下增加如下代码,用过网上的直接换掉就可以 function index_get_cat_id_goods_best_list($cat ...

  4. ACdream: Sum

    Sum Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatisticN ...

  5. 悟道—位IT高管20年的职场心经(读书笔记五)

    悟道--一位IT高管20年的职场心经 第五章 搞定老板 "老板就是老板" 这一点,你可能会忘了,他一定不会忘: "老板不会总是老板" 这一点,他可能会忘,你最好 ...

  6. WPF对于xml的简单操作(上)

    private void button1_Click(object sender, RoutedEventArgs e) { XmlTextWriter writer = new XmlTextWri ...

  7. HTML5学习笔记简明版(11):新API

    HTMLDocument上的扩展 HTML5在DOM Level 2 HTML上扩展了一些HTMLDocument的接口. 这些接口在全部实现了Document接口的元素对象上进行了实现.HTML5在 ...

  8. BST树,B树、B-树、B+树、B*树

    BST树,B树.B-树.B+树.B*树 二叉搜索树(BST): 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树 ...

  9. Socket的错误码和描述(中英文翻译)

    Socket的错误码和描述(中英文翻译) //下面是Socket Error的错误码和描述: Socket error 0 - Directly send error  Socket error 10 ...

  10. 泛泰A860 Andorid4.4.3 KTU84M (Omni) 图赏

    Omni4.4.3 For Pantech A860L/K/S watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3lob3N0/font/5a6L5L2T/ ...