摘要:分节表视图步骤创建一个工程删除中中的,再从对象库拖入一个到设计界面打开属性检查器,勾选选项,否则应用启动后是黑屏将类的父类由改为打开的属性选择器在列表中选择默认以注册和协议,不需要再注册代码实现年排序组中条目的数量组的数量组的标题
分节表视图 步骤
创建一个iOS工程
删除storyboard中View Controller Scene 中的View Controller,再从对象库拖入一个Table View Controller到设计界面
打开Table View Controller属性检查器,勾选Is Initial View Controller选项,否则应用启动后是黑屏
将ViewController类的父类由UIViewController改为UITableViewController
打开View Controller的属性选择器在Class列表中选择ViewController
UITableViewController默认以注册UITableViewDataSource和UITableViewDelegate协议,不需要再注册
代码实现// // ViewController.swift // IndexTable // // Created by Michael on 2016/10/31. // Copyright © 2016年 Michael. All rights reserved. // import UIKit class ViewController: UITableViewController { var datas: NSDictionary! var groupNames:NSArray! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let path = Bundle.main.path(forResource: "team_dictionary", ofType: "plist") self.datas = NSDictionary(contentsOfFile: path!) let tempList = self.datas.allKeys as NSArray //排序 let sortedArray = tempList.sortedArray(comparator: { (obj1, obj2) -> ComparisonResult in let str1 = obj1 as! String let str2 = obj2 as! String let ret = str1.compare(str2) return ret }) self.groupNames = sortedArray as NSArray! } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //组中条目的数量 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { let groupName = self.groupNames[section] as! String let teams = self.datas[groupName] as! NSArray return teams.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell:UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "liu",for: indexPath) let section = indexPath.section let row = indexPath.row let groupName = self.groupNames[section] as! String let teams = self.datas[groupName] as! NSArray cell.textLabel?.text = teams[row] as? String return cell } //组的数量 override func numberOfSections(in tableView: UITableView) -> Int { return self.groupNames.count } //组的标题 override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { let name = self.groupNames[section] as! String return name } //索引的标题 override func sectionIndexTitles(for tableView: UITableView) -> [String]? { var titles = [String]() for item in self.groupNames { let title = item as! String titles.append(title.substring(to: title.index(title.startIndex, offsetBy: 1))) } return titles } //点击事件 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let section = indexPath.section let row = indexPath.row let groupName = self.groupNames[section] as! String let teams = self.datas[groupName] as! NSArray print(groupName) print(teams[row]) } }示例 静态表视图 步骤
创建一个iOS工程,使用Table View Controller作为表视图控制器
选择Table View,打开属性检查器,从Content下拉列表中选择Static Cells,将Section的值为设为3.,从Style下拉列表中选择Grouped
选择第一个Table View Section,将Rows值设为2,即该节中包含两个单元格,分别拖入一个TextField到两个单元格中
选择第二个Table View Section,将Rows值设为1,拖入一个Button到单元格中
选择第二个Table View Section,将Rows值设为1,拖入一个Lable到单元格中
代码实现// // ViewController.swift // StaticTable // // Created by Michael on 2016/11/2. // Copyright © 2016年 Michael. All rights reserved. // import UIKit class ViewController: UITableViewController { @IBOutlet weak var mUserName: UITextField! @IBOutlet weak var mPwd: UITextField! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func login(_ sender: UIButton) { if self.mUserName.text == "liu" && self.mPwd.text == "123" { NSLog("login sucess"); mUserName.resignFirstResponder(); mPwd.resignFirstResponder(); } } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { NSLog("Section: %d,Row: %d",indexPath.section,indexPath.row); } }示例 插入和删除单元格 步骤
创建一个iOS工程
删除storyboard中View Controller Scene 中的View Controller,再从对象库拖入一个Navigation Controller到设计界面,同时也会添加一个Table View Controller到设计界面
打开Table View Controller属性检查器,勾选Is Initial View Controller选项,否则应用启动后是黑屏
将ViewController类的父类由UIViewController改为UITableViewController
打开View Controller的属性选择器在Class列表中选择ViewController
UITableViewController默认以注册UITableViewDataSource和UITableViewDelegate协议,不需要再注册
代码实现// // ViewController.swift // DeleteAddCell // // Created by Michael on 2016/11/2. // Copyright © 2016年 Michael. All rights reserved. // import UIKit class ViewController: UITableViewController { var txtField:UITextField! var listTeams: NSMutableArray! override func viewDidLoad() { super.viewDidLoad() //设置导航栏 self.navigationItem.rightBarButtonItem = self.editButtonItem self.navigationItem.title = "单元格插入和删除" self.txtField = UITextField() self.listTeams = NSMutableArray(array: ["黑龙江","吉林","辽宁","北京"]) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //响应视图编辑状态 override func setEditing(_ editing: Bool, animated: Bool) { super.setEditing(editing, animated: animated) self.tableView.setEditing(editing, animated: true) if editing { self.txtField.isHidden = false } else{ self.txtField.isHidden = true } } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.listTeams.count + 1 } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let isAddCell = (indexPath.row == self.listTeams.count) let cell:UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) if !isAddCell { cell.accessoryType = .disclosureIndicator cell.textLabel?.text = self.listTeams[indexPath.row] as? String } else { self.txtField.frame = CGRect(x: 40, y: 0, width: 300, height: cell.frame.size.height) self.txtField.borderStyle = .none self.txtField.placeholder = "Add..." self.txtField.text = "" cell.addSubview(self.txtField) } return cell } //返回编辑样式 override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle { if indexPath.row == self.listTeams.count { return .insert } else { return .delete } } //添加删除时调用 override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { self.listTeams.removeObject(at: indexPath.row) self.tableView.deleteRows(at: [indexPath], with: .fade) } else if editingStyle == .insert { self.listTeams.insert(self.txtField.text!, at: self.listTeams.count) self.tableView.insertRows(at: [indexPath], with: .fade) } self.tableView.reloadData(); } }示例 移动单元格 步骤
1. 创建一个iOS工程 2. 删除storyboard中View Controller Scene 中的View Controller,再从对象库拖入一个Navigation Controller到设计界面,同时也会添加一个Table View Controller到设计界面 3. 打开Table View Controller属性检查器,勾选Is Initial View Controller选项,否则应用启动后是黑屏 4. 将ViewController类的父类由UIViewController改为UITableViewController 5. 打开View Controller的属性选择器在Class列表中选择ViewController 6. UITableViewController默认以注册UITableViewDataSource和UITableViewDelegate协议,不需要再注册代码实现
// // ViewController.swift // MoveCell // // Created by Michael on 2016/11/2. // Copyright © 2016年 Michael. All rights reserved. // import UIKit class ViewController: UITableViewController { var listTeams: NSMutableArray! override func viewDidLoad() { super.viewDidLoad() //设置导航栏 self.navigationItem.rightBarButtonItem = self.editButtonItem self.navigationItem.title = "单元格移动" self.listTeams = NSMutableArray(array: ["黑龙江","吉林","辽宁","北京"]) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //响应视图编辑状态 override func setEditing(_ editing: Bool, animated: Bool) { super.setEditing(editing, animated: animated) self.tableView.setEditing(editing, animated: true) } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.listTeams.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell:UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "MoveCell", for: indexPath) cell.accessoryType = .disclosureIndicator cell.textLabel?.text = self.listTeams[indexPath.row] as? String return cell } //返回true表示可以移动 override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { return true } //移动单元格时触发此方法 override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) { let mode = self.listTeams[sourceIndexPath.row] as! String self.listTeams.removeObject(at: sourceIndexPath.row) self.listTeams.insert(mode, at: destinationIndexPath.row) } //编辑的样式 override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle { return .delete } override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { self.listTeams.removeObject(at: indexPath.row) self.tableView.deleteRows(at: [indexPath], with: .fade) } else if editingStyle == .insert { self.tableView.insertRows(at: [indexPath], with: .fade) } self.tableView.reloadData(); } }示例 下拉刷新 步骤
创建一个iOS工程
删除storyboard中View Controller Scene 中的View Controller,再从对象库拖入一个Table View Controller到设计界面
打开Table View Controller属性检查器,勾选Is Initial View Controller选项,否则应用启动后是黑屏
将ViewController类的父类由UIViewController改为UITableViewController
打开View Controller的属性选择器在Class列表中选择ViewController
UITableViewController默认以注册UITableViewDataSource和UITableViewDelegate协议,不需要再注册
代码实现// // ViewController.swift // RefreshCell // // Created by Michael on 2016/11/7. // Copyright © 2016年 Michael. All rights reserved. // import UIKit class ViewController: UITableViewController { var listTeams: NSMutableArray! override func viewDidLoad() { super.viewDidLoad() //设置导航栏 self.navigationItem.rightBarButtonItem = self.editButtonItem self.navigationItem.title = "单元格移动" let rc = UIRefreshControl() rc.attributedTitle = NSAttributedString(string: "下拉刷新") rc.addTarget(self, action: #selector(ViewController.refresh), for: .valueChanged) self.refreshControl = rc self.listTeams = NSMutableArray(array: ["黑龙江","吉林","辽宁","北京"]) } func refresh() { NSLog("refresh") if (self.refreshControl?.isRefreshing)! { self.refreshControl?.attributedTitle = NSAttributedString(string: "加载中") listTeams.add("上海") listTeams.add("天津") self.refreshControl?.endRefreshing() self.refreshControl?.attributedTitle = NSAttributedString(string: "下拉刷新") } self.tableView.reloadData() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //响应视图编辑状态 override func setEditing(_ editing: Bool, animated: Bool) { super.setEditing(editing, animated: animated) self.tableView.setEditing(editing, animated: true) } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.listTeams.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell:UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "RefreshCell", for: indexPath) cell.accessoryType = .disclosureIndicator cell.textLabel?.text = self.listTeams[indexPath.row] as? String return cell } //返回true表示可以移动 override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { return true } //移动单元格时触发此方法 override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) { let mode = self.listTeams[sourceIndexPath.row] as! String self.listTeams.removeObject(at: sourceIndexPath.row) self.listTeams.insert(mode, at: destinationIndexPath.row) } //编辑的样式 override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle { return .delete } override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { self.listTeams.removeObject(at: indexPath.row) self.tableView.deleteRows(at: [indexPath], with: .fade) } else if editingStyle == .insert { self.tableView.insertRows(at: [indexPath], with: .fade) } self.tableView.reloadData(); } }示例
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/16538.html
摘要:较等待事件的方式,更有概括性。在非空闲的等待事件,又可进一步划分细的类别。此等待事件的平均等待用时单位百分之一秒。活动会话正在等待的资源或事件信息。的等待事件结束后,的统计信息将会发生改变。 一、等待事件由来 大家可能有些奇怪,为什么说等待事件,先谈到了指标体系。其实,正是因为指标体系的发展,才导致等待事件的引入。总结一下,Oracle的指标体系,大致经历了下面三个阶段: 以命中率为主...
摘要:最近我完成了和的开发。通过这次的实践,我希望透过独特的视角,分析和比较为这两个平台开发应用的过程。在上,屏幕翻转会直接销毁现有整个视图栈栈,屏幕翻转完成后再重建每个视图。 随便搜索一下Android vs. iOS,都会出现很多关于哪个平台更好的争论,大多数的争论点都是关于市场占有率、易用性和设备分化等问题。当然也有一些以开发者的角度去比较这两个平台的文章,但是很少有从技术上做深入的比...
摘要:最近我完成了和的开发。通过这次的实践,我希望透过独特的视角,分析和比较为这两个平台开发应用的过程。在上,屏幕翻转会直接销毁现有整个视图栈栈,屏幕翻转完成后再重建每个视图。 随便搜索一下Android vs. iOS,都会出现很多关于哪个平台更好的争论,大多数的争论点都是关于市场占有率、易用性和设备分化等问题。当然也有一些以开发者的角度去比较这两个平台的文章,但是很少有从技术上做深入的比...
摘要:界面应用界面主要是使用框架开发,它有一套自己的模式,其中视图和控制器是中的及其子类和及其子类。应用界面构建层次一般情况下,用于中只包含一个。 iOS界面应用界面主要是使用Cocoa Touch框架开发,它有一套自己的MVC模式,其中视图和控制器是UIKit中的UIVIew及其子类和UIVIewController及其子类。 视图控制器 Cocoa Touch中UIVIewControl...
阅读 1102·2021-11-24 09:38
阅读 3069·2021-11-22 12:03
阅读 3777·2021-11-11 10:59
阅读 1911·2021-09-28 09:36
阅读 856·2021-09-09 09:32
阅读 3207·2021-08-05 10:00
阅读 2358·2021-07-23 15:30
阅读 2840·2019-08-30 13:12