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.pswp.cn/news/284508.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284508.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284508.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows 11 新版 25163 推送!任務欄全新菜單、應用商店更新、文件資源管理器大量修復...

面向 Dev 頻道的 Windows 預覽體驗成員,微軟現已推送 Windows 11 預覽版 Build 25163。主要變化1.微軟宣布為 Windows 11 任務欄引入全新溢出體驗,當任務欄上的應用程序圖標或窗口達到任務欄容量上限時,將啟用全新溢出菜單。2.微軟更新了 Mic…

shell中source與sh區別

shell中使用source conf.sh,是直接運行conf.sh的命令,不創建子shell,類似與html中include,而sh是則創建子shell,子shell里面 的變量父shell無法使用,對環境變量的修改也不影響父shell。父shell中的局部變量…

[轉]Web3 是去中心化的“騙局”?

作者 | InvisibleUp 譯者 | 彎月 出品 | CSDN(ID:CSDNnews) Web3 不是去中心化。 雖然我覺得這一點很明顯,根本不需要通過一篇文章來說明,但我也是迫不得已,因為突然之間各大科技巨頭,比如 Redd…

實景三維建設背景下,三維GIS面臨哪些挑戰?

2021年8月26日,自然資源部印發《實景三維中國建設技術大綱(2021版)》,明確指出“實景三維中國建設是落實數字中國、平安中國、數字經濟戰略的重要舉措,是落實國家新型基礎設施建設的具體部署,是服務生態文明…

無需編碼,自動實現“異步 Request-Reply”模式

前言上次,我們雖然用代碼實現了“異步 Request-Reply 模式”,但是需要為每一個長時間操作 API 實現一個對應的 AsyncXXX 操作。其實,可以嘗試用 Source Generators 減少這種重復性勞動。實現思路Controller 類必須是partial,這樣才能為它額外…

Kotlin Weekly 中文周報

Kotlin Weekly 中文周報 —— 25 Kotlin 開發中文周報 文章 使用 Kotlin 中的 takeIf (zhuanlan.zhihu.com) 在 Kotlin 的標準函數中有個 takeIf 函數,你是否了解這個函數呢?它是否只是漂亮點的 if 語句呢? Kotlin 的…

第一次玩,試試手(標題)

Hello Blog!!轉載于:https://blog.51cto.com/10999994/1786094

【CASS精品教程】CASS9.1生成標準圖幅案例教程

在CASS中,可以很方便的生成標準圖幅,如50*50。本文演示cass中,根據測區范圍標準圖幅生成過程。 一、圖幅預覽: 二、圖幅生成 打開測區范圍,如下圖所示: 點擊【繪圖處理】→【批量分幅】→【格網建立】,如下圖所示: 選擇比例尺500,直接回車。 選擇圖幅50*50。 根據測區…

[轉]mpvue中的小程序調用系統自帶查看圖片的功能

mpvue中的小程序調用系統自帶查看圖片的功能 這里舉個栗子&#xff1a; <template><div class"keting"><div class"centsimg dja"><swiper:current"curr"display-multiple-items"1"next-margin"0rpx"c…

隱馬爾科夫

前向、后向算法解決的是一個評估問題&#xff0c;即給定一個模型&#xff0c;求某特定觀測序列的概率&#xff0c;用于評估該序列最匹配的模型。Baum-Welch算法解決的是一個模型訓練問題&#xff0c;即參數估計&#xff0c;是一種無監督的訓練方法&#xff0c;主要通過EM迭代實…

去創業公司不能有一夜暴富的僥幸,更不能指望掉餡餅

為了實現財務自由&#xff0c;去創業公司是一個不錯的選項&#xff0c;我自己也去過創業公司&#xff0c;身邊的朋友也有不少去過或正在創業公司里干&#xff0c;我就結合下我經歷過的和我看到的&#xff0c;說下我的感受。 1 該去哪種類型的創業公司 第一&#xff0c;這個公司…

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

前言Exceptionless 是一個開源的實時的日志收集框架&#xff0c;它可以應用在基于 ASP.NET&#xff0c;ASP.NET Core&#xff0c;Web API&#xff0c;Web Forms&#xff0c;WPF&#xff0c;Console&#xff0c;ASP.NET MVC 等技術開發的應用程序中&#xff0c;并且提供了REST接…

[轉]使用npm發布vue組件

&#x1f636; NPM 是隨同 NodeJS 一起安裝的 javascript 包管理工具&#xff0c;能解決 NodeJS 代碼部署上的很多問題 發布前的準備 注冊一個 npm 賬號 前往 NPM 官網進行注冊 初始化項目 這里用的是webpack-simple,可以理解為精簡版的vue-cli。 如果沒有全局安裝 vue 的話&am…

[置頂]tcpflow 抓包

轉自&#xff1a; http://www.rwifeng.com/jekyll/update/2015/04/16/how-to-tcpflow/ tcpflow 抓包 Apr 16, 2015 大家都知道 tcpdump 是一個很方便的抓包工具&#xff0c; 但是 tcpdump 是以包為單位進行輸出的&#xff0c;閱讀起來不是很方便。 而 tcpflow 是面向 TCP 流的…

spark-2.1.0 集群安裝

1、spark安裝前提——必須安裝好Hadoop&#xff08;本人有三臺機&#xff0c;已安裝好Hadoop&#xff09; 2、下載spark&#xff0c;解壓至master機本地文件 3、修改/conf/spark-env.sh&#xff08;原名spark-env.sh.template&#xff0c;把它改過來&#xff09; 配置如下&…

如何用grep命令同時顯示“匹配行”上下的n行?

如何用grep命令同時顯示匹配行上下的n行 標準unix/linux下的grep通過以下參數控制上下文grep -C 5 foo file 顯示file文件中匹配foo字串那行以及上下5行grep -B 5 foo file 顯示foo及前5行grep -A 5 foo file 顯示foo及后5行

【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原理及其解析過程精彩剖析原創作品&#xff0c;允許轉載&#xff0c;轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://369369.blog.51cto.com/319630/812889網絡通訊大部分是基于TCP/IP的&#xff0c;而TCP/IP是基于IP地址的&am…

sybase sp_procxmode簡述

今天整合存儲過程的腳本時&#xff0c;看到如下語句&#xff1a; sp_procxmode P_InitTaskByCond, anymodeGO 于是查詢了一下【sp_procxmode】 的一些簡單介紹&#xff0c;進行記錄一下&#xff1a;整理中 https://www.google.com.hk/search?newwindow1&safestrict&si…