Swift UI学习UITableView and protocol use
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的更多相关文章
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(六)Picker View视图 学习笔记
想对PickerView进行操作,只能在代码中操作. 下面 ,再添加三个label组件,然后将所有组件配置到代码中(看代码),然后要实现对PickerView的操作,就要实现它的DataSource协 ...
- Swift UI
概述 Apple近日发布了Swift编程语言,Swift是供iOS和OS X应用编程的新编程语言.相信很多开发者都在学习这门新语言. 废话不多说,下面我就来学习使用Swift创建一个简单的UI应用 ...
- Swift UI开发初探
今天凌晨Apple刚刚发布了Swift编程语言,Swift是供iOS和OS X应用编程的新编程语言.相信很多开发者都在学习这门新语言. 废话不多说,下面我就来学习使用Swift创建一个简单的UI应用程 ...
- Swift开发学习(一):初始篇
http://blog.csdn.net/powerlly/article/details/29351103 Swift开发学习:初始篇 关于 苹果公司于WWDC2014(Apple Worldwid ...
- 一份关于Swift语言学习资源的整理文件
一份关于Swift语言学习资源的整理文件 周银辉 在这里下载 https://github.com/ipader/SwiftGuide
- Swift入门学习之一常量,变量和声明
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/6059421.html Swift入门学习之一常量,变量和 ...
- iOS开发UI篇—UITableview控件简单介绍
iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...
- iOS开发UI篇—UITableview控件基本使用
iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...
- iOS开发UI篇—UITableview控件使用小结
iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...
随机推荐
- 王立平--Unity中间GUI Skin
C#文字: public class NewBehaviourScript2 : MonoBehaviour { public Texture t; public GUISkin skin; // U ...
- c++ 对象指针参数和对象引用参数02
对象指针作为函数参数和对象引用作为函数参数都比对象作为函数参数要用的更为普遍 传对象指针和传对象引用作为实参,那么实参在函数里发生了变话,那么相应的对象本身也会发生变化,二传递对象本身作为实参的话,实 ...
- Error与Exception的区别
错误和异常的区别(Error vs Exception) 错误和异常的区别(Error vs Exception) 今天面试问了这样一个问题,"Error" 和 "Exc ...
- VC6.0入门使用
软件下载地址 http://pan.baidu.com/s/1qWuqFAO 新建win console 32 project,然后新建header文件.最后新建source cpp文件.如图所看到的
- VC中Tab control的用法
1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish. 2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置I ...
- 所有城市list每次从页面花1段时间抽取后写入到数组,
所有城市list每次从页面花1段时间抽取后写入到数组,
- POJ 3181 Dollar Dayz 简单DP
这DP虽然简单 但是思考一下还是挺好的 题意是 1,2,3,4....k 用加法凑成N 每个数可取不限个数 令dp[i][j] 表示前i种数凑成j的方案数 然后dp[i][j] = dp[i - 1] ...
- java 线程 新类库中的构件 countDownLatch 使用
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlhbmdydWkxOTg4/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- Swift难点-继承中的构造规则实例具体解释
关于继承中的构造规则是一个难点. 假设有问题,请留言问我. 我的Swift新手教程专栏 http://blog.csdn.net/column/details/swfitexperience.html ...
- BestCoder Round#8 1003
dp[i][j] 表示以i结尾的长度为j的递增子序列dp[i][j] = sum(dp[k][j]) k<i && a[i] >a[j]如果只是单纯的循环for(j ...