2019独角兽企业重金招聘Python工程师标准>>>

原文: https://makeapppie.com/2014/09/18/swift-swift-implementing-picker-views/
效果:

步骤:

新建iOS single view application 名字为SwiftPickerViewPizzaDemo, 打开main storyboard选中view controoler, 右上角, attribute inspector中simulated metrics 的size 选择iphone 4.7-inch这样view controller更像是一个iphone..

然后拖动三个控件到界面上label, label, picker view

最后打开assistant editor, ctrl 拖动第二个label以及picker view控件到viewController.swift中, 会自动生成如下代码

class ViewController: UIViewController {
//MARK -Outlets and Properties
@IBOutlet weak var myLabel: UILabel!
@IBOutlet weak var myPicker: UIPickerView!//MARK - Instance Methods//MARK - Life Cycle
override func viewDidLoad() {
super.viewDidLoad()}
//MARK - Delgates and Data Source
}

在ViewController中新增如下属性:

let pickerData = [["10\"","14\"","18\"","24\""],["Cheese","Pepperoni","Sausage","Veggie","BBQ Chicken"]
]

让ViewController实现两个接口.

class ViewController: UIViewController,UIPickerViewDataSource,UIPickerViewDelegate {

在viewDidLoad中让ViewController自身成为picker view的delegate

//MARK - Life Cycle
override func viewDidLoad() {super.viewDidLoad()myPicker.delegate = selfmyPicker.dataSource = self
}

下面实现接口中定义的方法 以解决如下错误: Type 'ViewController' does not conform to protocol 'UIPickerViewDataSource'

    // 一共有多少列, 这里有两列, 一列是size, 一列是toppingfunc numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {return pickerData.count}// 每列有多少条记录func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {return pickerData[component].count}// 每列中的每行显示什么内容func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {return pickerData[component][row]}// 选中某行时的回调函数.func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {updateLabel()}

这里可以利用代码提示,比如实现最后一个方法只需要输入pickerViewdid再自动补全就写好了.

完整的代码如下:

//
//  ViewController.swift
//  SwiftPickerViewPizzaDemo
//
//  Created by cyper on 16/6/3.
//  Copyright © 2016年 Moaz Tech. All rights reserved.
//import UIKitclass ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {// 定义要显示的两栏数据. 第1栏为尺寸, 第2栏为pizza表层的用料// 分别是奶酪, 辣肉肠, 香肠, 蔬菜 和 烤鸡let pickerData = [["10\"","14\"","18\"","24\""],["Cheese", "Pepperoni", "Sausage", "Veggie", "BBQ Chicken"]]enum PickerComponent: Int {case size = 0case topping = 1}//MARK -Outlets and Properties@IBOutlet weak var myLabel: UILabel!@IBOutlet weak var myPicker: UIPickerView!//MARK - Instance Methodsfunc updateLabel(){let szComponent = PickerComponent.size.rawValuelet tpComponent = PickerComponent.topping.rawValuelet size = pickerData[szComponent][myPicker.selectedRowInComponent(szComponent)]let topping = pickerData[tpComponent][myPicker.selectedRowInComponent(tpComponent)]myLabel.text = "Pizza: \(size) \(topping)"}//MARK - Life Cycleoverride func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.myPicker.delegate = selfmyPicker.dataSource = self// 默认选中18寸的myPicker.selectRow(2, inComponent: PickerComponent.size.rawValue, animated: false)updateLabel()}//MARK - Delgates and Data Source// 一共有多少列, 这里有两列, 一列是size, 一列是toppingfunc numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {return pickerData.count}// 每列有多少条记录func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {return pickerData[component].count}// 每列中的每行显示什么内容func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {return pickerData[component][row]}// 选中某行时的回调函数.func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {updateLabel()}
}

美化应用.

1. 将原文中的背景图photo-sep-14-7-40-59-pm_small1.jpg另存到本地, 然后拖动到项目根目录下(project navigator)

2. 这样在xcode右下角的media library中就能看到这张图片

3. 从media library把这张图片手动到view controller里边, 图片会覆盖整个手机屏幕, 从outline中将这个图片放到最上面(在outline中越靠近上面的条目用css的术语来说它的z-index值越小)

4. 选中picker view设置它的背景色(从颜色选择器中选择crayon 模式 , 颜色选 Snow 透明度 50%)

5. 给两个label设置透明的背景, 方法是先拖动一个新的空白view到最下面(如下), 如法炮制设置它的背景为snow 50%,  然后将最上面的两个label拖动到这个空白view里边, 当你把一个view拖进另一个view的时候, 这个view就会变成subview.

6. 将这个包含了两个label的view拖回到最上面..

作者一再强调, 尽量使用table view而不要使用picker view, (使用picker view的场景是显示的内容相对固定, 不超过3栏, 每栏的内容不超过15条)

期间碰到了一个问题: 背景图片的高度不够, 导致屏幕下面多出了一片空白, 解决办法:
1. 选中View Controller, 在file inspector中反选auto layout和 using size class (后来选中也不影响?  还要继续学习auto layout的用法)
2. 选中image, 在attribute inspector中设置view mode为scale to fill

转载于:https://my.oschina.net/uniquejava/blog/686626

swift学习选pizza项目相关推荐

  1. swift学习五天 项目实战-知乎日报之网络交互NSURLConnection

    这里附上代码下载地址:     http://download.csdn.net/detail/guchengyunfeng/7989139 网络接口 格式: 协议1: http://news-at. ...

  2. Swift学习笔记笔记(六) Xcode项目的创建

    一.实验目的: 1.了解iOS开发工具 2.掌握Xcode项目的设计过程 3.掌握模拟器的运行方法 二.实验原理: 1.Xcode项目创建与设计步骤 2.Xcode工作界面 3.Xcode项目的运行方 ...

  3. Vue3+TypeScript从入门到进阶(六)——TypeScript知识点——附沿途学习案例及项目实战代码

    文章目录 一.简介 二.Vue2和Vue3区别 三.Vue知识点学习 四.TypeScript知识点 一.JavaScript和TypeScript 二.TypeScript的安装和使用 1.Type ...

  4. swift 学习资料大全

    版本:Swift github排名 https://github.com/trending,github搜索:https://github.com/search 主要工作说明:  1. 将Swift从 ...

  5. 全面的Swift学习资料整理

    资料1 ---教程类 官方文档中文翻译http://wiki.jikexueyuan.com/project/swift/Github上的地址点我 Using Swift with Cocoa and ...

  6. 腾讯再次海选AI项目,1500进40,医疗零售机器人成新风向

    雷刚 发自 凹非寺  量子位 报道 | 公众号 QbitAI 一年一度风向标,腾讯又一次海选AI项目. 去年第一期腾讯AI加速器结业后,鹅厂就马不停蹄开启了第二期报名,而且这一次报名企业更多.竞争更激 ...

  7. Apple Swift学习资料汇总

    [更新]Apple Swift学习资料汇总 1月16日厦门 OSC 源创会火热报名中,奖品多多哦 »   今年的苹果开发者大会(WWDC)上,公布了ios8的几个新特性,其中包括引入了群聊功能,支持第 ...

  8. Vue学习随笔+商城项目【上】

    更新日期:2021-02-10 晚 [新年快乐] 附:Vue学习随笔+商城项目[下] 目录(部分) (一)ES6补充 1.1块级作用域 1.1.1 什么是变量作用域 1.1.2 没有块级作用域造成的问 ...

  9. 汇集了很多swift 学习指南

    https://github.com/ipader/SwiftGuide 1,059  Unstar 7,294 Fork1,966 ipader/SwiftGuide  Code  Issues 0 ...

最新文章

  1. AI战“疫“之路:​揭秘高精准无感测温系统的全栈AI 技术
  2. faster rcnn论文_faster-rcnn论文思路及代码编译
  3. TensorFlow 变量共享,命名空间
  4. php并发扣款,PHP 并发扣款,保证数据一致性(悲观锁)
  5. 企业网络推广期间对于易流失用户群体企业网络推广有话说
  6. Interview:算法岗位面试—10.15上午—上海某公司算法岗位(偏图像算法,制造行业)技术面试考点之AI算法与实际场景结合产生商业价值的头脑风暴
  7. Skype通讯协议分析
  8. 3到6年的.NETer应该掌握哪些知识
  9. mc服务器tps优化,LaggRemover——降低延迟/优化TPS/内存
  10. Find Minimum in Rotated Sorted Array leetcode java
  11. appenders_Log4j Appenders教程
  12. python为什么无法保存然后弹跳出来_python-从字典中弹出键,值对的整洁方法?
  13. 高等数学复习笔记(一)- 高等数学基础知识、数列与函数的极限
  14. 鹏华基金:科技赋能 打造公募基金的头部机构
  15. 汇编语言里调用函数的过程和堆栈平衡问题
  16. 让Yahoo!奇摩害怕的无名小站
  17. Python学习笔记---day03 Python基础
  18. Caysn打印机安卓平台开发包接口说明文档及打印示例程序_20170609
  19. 博瑞ge 加装无线 carpaly方法和效果展示
  20. 无需安装Microsoft Office和Adobe实现办公文档操作,Spire.Office免费资源清单一览

热门文章

  1. Bootstrap-CSS:表格
  2. php-fpm配置笔记
  3. 宽客的人amp;amp;事件映射
  4. 黑马-程序员C#泛型简介
  5. 【ASP】简单Url编码和Url解码实例
  6. 高速缓冲存储器的功能、结构与工作原理
  7. Cortex-A7 MPCore 架构详细介绍(九种运行模式、内核寄存器组R0~R15,有特定的名字和功能)
  8. linux驱动开发---并发控制
  9. linux运维和3dmax哪个简单,牛逼运维常用的工具系列-2
  10. android reboot 定时重启可靠吗,请教一下有人做过安卓系统 reboot 重启之后,appium 能自动重新连接吗...