swift学习选pizza项目

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

原文: 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值越小)
151657_zMdn_113421.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 11 新版 25163 推送!任务栏全新菜单、应用商店更新、文件资源管理器大量修复...

面向 Dev 频道的 Windows 预览体验成员,微软现已推送 Windows 11 预览版 Build 25163。主要变化1.微软宣布为 Windows 11 任务栏引入全新溢出体验,当任务栏上的应用程序图标或窗口达到任务栏容量上限时,将启用全新溢出菜单。2.微软更新了 Mic…

[转]Web3 是去中心化的“骗局”?

作者 | InvisibleUp 译者 | 弯月 出品 | CSDN(ID:CSDNnews) Web3 不是去中心化。 虽然我觉得这一点很明显,根本不需要通过一篇文章来说明,但我也是迫不得已,因为突然之间各大科技巨头,比如 Redd…

实景三维建设背景下,三维GIS面临哪些挑战?

2021年8月26日,自然资源部印发《实景三维中国建设技术大纲(2021版)》,明确指出“实景三维中国建设是落实数字中国、平安中国、数字经济战略的重要举措,是落实国家新型基础设施建设的具体部署,是服务生态文明…

第一次玩,试试手(标题)

Hello Blog!!转载于:https://blog.51cto.com/10999994/1786094

【CASS精品教程】CASS9.1生成标准图幅案例教程

在CASS中,可以很方便的生成标准图幅,如50*50。本文演示cass中,根据测区范围标准图幅生成过程。 一、图幅预览: 二、图幅生成 打开测区范围,如下图所示: 点击【绘图处理】→【批量分幅】→【格网建立】,如下图所示: 选择比例尺500,直接回车。 选择图幅50*50。 根据测区…

分布式日志收集系统 - ExceptionLess的安装、配置、使用

前言Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web API,Web Forms,WPF,Console,ASP.NET MVC 等技术开发的应用程序中,并且提供了REST接…

[转]使用npm发布vue组件

😶 NPM 是随同 NodeJS 一起安装的 javascript 包管理工具,能解决 NodeJS 代码部署上的很多问题 发布前的准备 注册一个 npm 账号 前往 NPM 官网进行注册 初始化项目 这里用的是webpack-simple,可以理解为精简版的vue-cli。 如果没有全局安装 vue 的话&am…

[置顶]tcpflow 抓包

转自: http://www.rwifeng.com/jekyll/update/2015/04/16/how-to-tcpflow/ tcpflow 抓包 Apr 16, 2015 大家都知道 tcpdump 是一个很方便的抓包工具, 但是 tcpdump 是以包为单位进行输出的,阅读起来不是很方便。 而 tcpflow 是面向 TCP 流的…

【CASS精品教程】CASS自动插入DOM影像(附插件下载)

本文讲解在CASS中快速自动插入栅格数据(影像、DOM、DEM)等,支持tif、img等格式。 文章目录 一、效果预览二、插件安装三、插件下载一、效果预览 二、插件安装 打开CASS9.1软件,输入命令appload,回车。 选择插入影像插件,点击【加载】。 输入命令aimg,回车,可以进行影像…

用python来获取Github IP地址

Title: 快速获Github网站的IP地址 Author: JackieZheng Date: 2022-01-20 19:37:35 LastEditTime: 2022-01-22 09:14:49 LastEditors: Please set LastEditors Description: FilePath: \\vsTemp\\gitdns.pyimport os import sys import re import shutil import requestshosts_…

DNS原理及其解析过程【精彩剖析】

DNS原理及其解析过程精彩剖析原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://369369.blog.51cto.com/319630/812889网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的&am…

基于Kubernetes v1.24.0的集群搭建(二)

上一篇文章主要是介绍了,每台虚拟机的环境配置。接下来我们开始有关K8S的相关部署。另外补充一下上一篇文章中的K8S的changelog链接:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md1 配置yum源 所有节点都需要执行此…

JavaScript中的一些特殊用法(一)

为什么80%的码农都做不了架构师?>>> 1. 不使用script自闭合标签 script中使用自闭合标签,虽然他在XHTML中合法,但是不符合HTML规范,而且得不到某些浏览器的正确解析。我曾经就在引入EXT时使用此方式,导致无…

SPICE简史

如今每一天都有不知其数的半导体芯片设计公司与设计验证工程师,在用着电路仿真软件SPICE。SPICE广泛应用在仿真模拟电路(例如运放Op Amp,能隙基准稳压电源Bandgap Reference,数模/模数转换 AD/DA等),混合信…

【GlobalMapper精品教程】003:影像裁剪、批量影像分幅案例详解

本文以案例的形式,讲解Globalmapper中进行影像矩形框裁剪,矢量范围裁剪,标准图幅批量分幅的方法,配套实验数据为数据包中的data003.rar。订阅专栏后私信作者,获取中文安装包及配套实验数据包,便于同步学习。…

基于Kubernetes v1.24.0的集群搭建(三)

1 使用kubeadm部署Kubernetes 如无特殊说明&#xff0c;以下操作可以在所有节点上进行。1.1 首先我们需要配置一下阿里源cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttp://mirrors.aliyun.com/kubernetes/yum/repos/kubernet…

BAT批处理代码快速打开注册表并定位到指定目录

主要代码&#xff1a; echo off echo %1 copy %~nx0 c:\windows\system32 if "%1" NEQ "" (set regPath%1) else (set /p regPath输入打开的注册表路径:) :trimRight if "%regPath:~-1%""\" set "regPath%regPath:~0,-1%" …

中国元宇宙白皮书

PS&#xff1a;PDF目录&#xff08;书签&#xff09;是为便于阅读&#xff0c;重新整理过的。 2022《中国元宇宙白皮书》-互联网文档类资源-CSDN下载1月26日&#xff0c;2022《中国元宇宙白皮书》在北京中关村正式全网发布。该白皮书由国科创新研究院首席科学家更多下载资源、学…

【GlobalMapper精品教程】002:GlobalMapper中文版安装后的基本设置

本文讲述安装globalmapper后的一些简单基本设置&#xff08;持续更新&#xff09;&#xff0c;为后续深入学习软件打下基础。订阅专栏后私信作者&#xff0c;获取中文安装包及配套实验数据包。 文章目录1. 工具条的显示与关闭2. 面积单位设置3. 选择所选面要素的边框4. 二三维联…

【GlobalMapper精品教程】005:影像拼接与裁切(分幅)作业案例教程

本文讲述Globalmapper影像拼接与裁剪案例教程。 文章目录 一、影像的拼接(1)针对少量影像的拼接(2)针对大量影像的拼接二、影像的裁剪一、影像的拼接 (1)针对少量影像的拼接 如果影像数量比较小,可以通过加载→导出的方式进行拼接。 如下图所示,案例数据(配套实验数…