Swift教程_零基础学习Swift完整实例(六)_swift完整实例(构建控制层)

简介:

4.构建控制层

本章节主要来构建个功能的控制层,为之前已经创建好的storyboard中页面的自定义controller添加对应功能。

1.TabBarViewController

该控制器按照需求通过数据层服务类PKOElementDataService所构建的实现了PKOTableDataSourceProtocolUITableViewDataSource协议的4类数据集dataSource,并将他们赋值给tab种所展示view的控制器,即PKOElementTableViewController中。与此同时,为tabBarItem和navigation赋予相应的文字描述及图片。

代码如下。

[objc]  view plain  copy
  1. import UIKit  
  2.   
  3. class PKOElementTabBarViewController: UITabBarController {  
  4.       
  5.     override func viewDidLoad() {  
  6.         super.viewDidLoad()  
  7.           
  8.         var tableViewControllers = [UINavigationController]()//tab中所挂接的viewController集合  
  9.         var navigetionController : UINavigationController  
  10.         var tableViewController : PKOElementTableViewController  
  11.         var tabBarDataSource : PKOTableDataSourceProtocol  
  12.           
  13.         //by name  
  14.         navigetionController = self.storyboard?.instantiateViewControllerWithIdentifier("navForTableView") as UINavigationController//获取标识为navForTableView的导航页面控制器  
  15.         tableViewController = navigetionController.topViewController as PKOElementTableViewController//获取该导航页面下所显示的列表控制器  
  16.         tabBarDataSource = PKOTableByNameDataSource()//获取数据集  
  17.         tableViewController.tabBarItem.title = tabBarDataSource.name//tabbarItem的文字描述  
  18.         tableViewController.tabBarItem.image = tabBarDataSource.tabBarImage//tabbarItem的图标  
  19.         tableViewController.navigationItem.title = tabBarDataSource.navigationBarName//导航标题  
  20.         tableViewController.dataSource = tabBarDataSource//将数据赋值给列表控制器的dataSource  
  21.         tableViewControllers.append(navigetionController)//将该导航添加到集合中  
  22.           
  23.         //by number  
  24.         navigetionController = self.storyboard?.instantiateViewControllerWithIdentifier("navForTableView") as UINavigationController  
  25.         tableViewController = navigetionController.topViewController as PKOElementTableViewController  
  26.         tabBarDataSource = PKOTableByNumberDataSource()  
  27.         tableViewController.tabBarItem.title = tabBarDataSource.name  
  28.         tableViewController.tabBarItem.image = tabBarDataSource.tabBarImage  
  29.         tableViewController.navigationItem.title = tabBarDataSource.navigationBarName  
  30.         tableViewController.dataSource = tabBarDataSource  
  31.         tableViewControllers.append(navigetionController)  
  32.           
  33.         //by symbol  
  34.         navigetionController = self.storyboard?.instantiateViewControllerWithIdentifier("navForTableView") as UINavigationController  
  35.         tableViewController = navigetionController.topViewController as PKOElementTableViewController  
  36.         tabBarDataSource = PKOTableBySymbolDataSource()  
  37.         tableViewController.tabBarItem.title = tabBarDataSource.name  
  38.         tableViewController.tabBarItem.image = tabBarDataSource.tabBarImage  
  39.         tableViewController.navigationItem.title = tabBarDataSource.navigationBarName  
  40.         tableViewController.dataSource = tabBarDataSource  
  41.         tableViewControllers.append(navigetionController)  
  42.           
  43.         //by state  
  44.         navigetionController = self.storyboard?.instantiateViewControllerWithIdentifier("navForTableView") as UINavigationController  
  45.         tableViewController = navigetionController.topViewController as PKOElementTableViewController  
  46.         tabBarDataSource = PKOTableByStateDataSource()  
  47.         tableViewController.tabBarItem.title = tabBarDataSource.name  
  48.         tableViewController.tabBarItem.image = tabBarDataSource.tabBarImage  
  49.         tableViewController.navigationItem.title = tabBarDataSource.navigationBarName  
  50.         tableViewController.dataSource = tabBarDataSource  
  51.         tableViewControllers.append(navigetionController)  
  52.           
  53.         self.viewControllers = tableViewControllers//将该导航集合赋值给tabbar的viewControllers,将会出现以上4种tabbarItem  
  54.     }  
  55.       
  56.     override func didReceiveMemoryWarning() {  
  57.         super.didReceiveMemoryWarning()  
  58.         // Dispose of any resources that can be recreated.  
  59.     }  
  60.       
  61. }  

2.TableViewController

该控制器将TabBarViewController传来的dataSource赋值给自身的tableView.dataSource中,很方便就能显示想要的数据。

重写func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!)方法,该方法是跳转到明细页面前需要执行的。

代码如下。

[objc]  view plain  copy
  1. import UIKit  
  2.   
  3. class PKOElementTableViewController: UITableViewController {  
  4.       
  5.     var dataSource:PKOTableDataSourceProtocol?  
  6.       
  7.     override func viewDidLoad() {  
  8.         super.viewDidLoad()  
  9.         self.tableView.dataSource = self.dataSource  
  10.     }  
  11.       
  12.     override func didReceiveMemoryWarning() {  
  13.         super.didReceiveMemoryWarning()  
  14.         // Dispose of any resources that can be recreated.  
  15.     }  
  16.       
  17.     // In a storyboard-based application, you will often want to do a little preparation before navigation  
  18.     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {  
  19.         // Pass the selected object to the new view controller.  
  20.         var indexPath = self.tableView.indexPathForSelectedRow()  
  21.         var element = self.dataSource?.elementDataModelForIndexPath(indexPath!)//根据索引获取对象  
  22.         var elementDetailViewController = segue.destinationViewController as PKOElementDetailViewController  
  23.         elementDetailViewController.element = element//将数据对象赋值给明细页面的控制器  
  24.     }  
  25.       
  26. }  

3.DetailViewController

该控制器将绘制一个用来展示化学元素信息的卡片,包含背景图、名称、编码等信息。

其中涉及到的倒影和翻转动画会在以后详细说明,这里只要先把架子打起来即可。

代码如下。

[objc]  view plain  copy
  1. import UIKit  
  2.   
  3. class PKOElementDetailViewController: UIViewController {  
  4.       
  5.     var element = PKOElementDataModel()  
  6.       
  7.     var frontViewIsVisible = true//是否正面显示标识  
  8.       
  9.     var subView:UIView?  
  10.     var detailImage:PKOElementDetailImageView?  
  11.     var detailImageFlipped = PKOElementDetailImageFlippedView()  
  12.     var reflectionImage = UIImageView()  
  13.       
  14.     let reflectionRadio = 0.35//倒影的高度比例  
  15.       
  16.     //Called after the controller's view is loaded into memory.  
  17.     override func viewDidLoad() {  
  18.         super.viewDidLoad()  
  19.           
  20.         self.frontViewIsVisible = true  
  21.           
  22.         //绘制图片view的父view  
  23.         var imageSize = CGSizeMake(256256)  
  24.         var detailRect = CGRectMake((self.view.bounds.size.width - imageSize.width)/2, (self.view.bounds.size.height - imageSize.height)/2 - 40, imageSize.width, imageSize.height)  
  25.         var subView = UIView(frame: detailRect)  
  26.         self.subView = subView  
  27.         self.view.addSubview(subView)  
  28.           
  29.         //绘制图片  
  30.         var imageRect = CGRectMake(00, imageSize.width, imageSize.height)  
  31.         var detailImage = PKOElementDetailImageView(frame: imageRect)  
  32.         detailImage.element = self.element  
  33.         detailImage.detailController = self  
  34.         self.detailImage = detailImage  
  35.         self.subView?.addSubview(detailImage)  
  36.     }  
  37. }  

原文地址:http://blog.csdn.net/ooppookid/article/details/40373597
相关文章
|
数据处理 Swift
Swift 中的运算符和表达式是构建程序逻辑的基础,包括算术、关系、逻辑、位运算符及赋值运算符,用于数值计算、条件判断、位操作、赋值与更新等
Swift 中的运算符和表达式是构建程序逻辑的基础,包括算术、关系、逻辑、位运算符及赋值运算符,用于数值计算、条件判断、位操作、赋值与更新等。掌握这些工具是编写高效代码的关键。
371 1
|
编译器 Swift iOS开发
Swift 教程
10月更文挑战第23天
216 1
|
Swift C++ 索引
Swift开发——简单函数实例
函数是编程的基础,用于封装特定功能的代码。它们有关键词func、函数名、参数列表(可为空)和返回类型。多返回值可通过元组、数组、inout参数或可选类型实现。例如,返回元组 `(value1, value2)`,数组 `[value1, value2]` 或使用可选数组 `[[Double]]?`。函数可以作为其他函数的参数,类似闭包或Lambda表达式。在Swift中,示例展示了通过元组、带索引的元组、数组和可选类型返回多个值的函数。还演示了如何使用inout参数交换变量值。
366 5
Swift开发——简单函数实例
|
人工智能 物联网 API
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
|
安全 Swift Android开发
构建移动应用:Swift vs Kotlin —— 两大主流语言的对决
【5月更文挑战第11天】Swift与Kotlin在移动应用开发中各有优势。Swift是iOS开发的首选,以其简洁语法、高性能和类型安全著称;而Kotlin是Android的官方推荐语言,以其与Java的无缝互操作、空安全特性和简洁代码受到青睐。两者在语法简洁性、性能和社区支持上表现优秀,但平台兼容性不同。开发者应根据项目需求和目标平台选择合适的语言。
1608 1
|
机器学习/深度学习 数据采集 TensorFlow
【Swift开发专栏】Swift与机器学习:构建智能应用
【4月更文挑战第30天】本文探讨了使用Swift开发机器学习应用,分为三个部分:机器学习基础(定义、类型及应用),Swift在机器学习中的作用(Swift for TensorFlow、Core ML及性能优势),以及实践技巧(数据预处理、特征工程、模型训练与部署、性能优化和用户界面集成)。通过学习,开发者能掌握构建智能应用的技能,利用Swift的性能和安全性提升应用效率。随着深入学习,开发者可探索更多高级特性和技术,如深度学习和复杂数据分析。
532 2
|
安全 Swift iOS开发
【Swift 开发专栏】Swift 与 UIKit:构建 iOS 应用界面
【4月更文挑战第30天】本文探讨了Swift和UIKit在构建iOS应用界面的关键技术和实践方法。Swift的简洁语法、类型安全和高效编程模型,加上与UIKit的紧密集成,使开发者能便捷地创建用户界面。UIKit提供视图、控制器、布局、动画和事件处理等功能,支持灵活的界面设计。实践中,遵循设计原则,合理组织视图层次,运用布局和动画,以及实现响应式设计,能提升界面质量和用户体验。文章通过登录、列表和详情界面的实际案例展示了Swift与UIKit的结合应用。
815 1
|
监控 Swift iOS开发
局域网计算机监控软件中利用Swift构建iOS端的移动监控应用
在局域网计算机监控软件的开发中,构建iOS端的移动监控应用是一项关键任务。本文将介绍如何利用Swift语言实现这一目标,通过多个代码示例展示关键功能的实现。
470 1
|
安全 编译器 Swift
【Swift开发专栏】Swift的编译优化与构建配置
【4月更文挑战第30天】Swift编译优化与构建配置对开发效率和应用性能至关重要。编译优化包括不同级别的优化、函数内联、泛型特化、尾递归优化、死代码消除和链接时优化。在Xcode的"Build Settings"中可调整相关标志。构建配置涉及Debug与Release模式、自定义配置、条件编译、构建设置和脚本。开发时,应适时测试、选择适当优化级别、避免过度优化,并利用条件编译区分不同版本的代码。有效管理构建设置可提升开发质量和性能。
591 0
|
IDE 开发工具 Swift
Swift语言的教程
Swift语言的教程
416 1