swift学习选pizza项目

前端之家收集整理的这篇文章主要介绍了swift学习选pizza项目前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文: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中,会自动生成如下代码

  1. class ViewController: UIViewController {
  2. //MARK -Outlets and Properties
  3. @IBOutlet weak var myLabel: UILabel!
  4. @IBOutlet weak var myPicker: UIPickerView!
  5. //MARK - Instance Methods
  6. //MARK - Life Cycle
  7. override func viewDidLoad() {
  8. super.viewDidLoad()
  9. }
  10. //MARK - Delgates and Data Source
  11. }

在ViewController中新增如下属性:

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

让ViewController实现两个接口.

  1. class ViewController: UIViewController,UIPickerViewDataSource,UIPickerViewDelegate {

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

  1. //MARK - Life Cycle
  2. override func viewDidLoad() {
  3. super.viewDidLoad()
  4. myPicker.delegate = self
  5. myPicker.dataSource = self
  6. }

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

  1. // 一共有多少列,这里有两列,一列是size,一列是topping
  2. func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
  3. return pickerData.count
  4. }
  5. // 每列有多少条记录
  6. func pickerView(pickerView: UIPickerView,numberOfRowsInComponent component: Int) -> Int {
  7. return pickerData[component].count
  8. }
  9. // 每列中的每行显示什么内容
  10. func pickerView(pickerView: UIPickerView,titleForRow row: Int,forComponent component: Int) -> String? {
  11. return pickerData[component][row]
  12. }
  13. // 选中某行时的回调函数.
  14. func pickerView(pickerView: UIPickerView,didSelectRow row: Int,inComponent component: Int) {
  15. updateLabel()
  16. }

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

完整的代码如下:

  1. //
  2. // ViewController.swift
  3. // SwiftPickerViewPizzaDemo
  4. //
  5. // Created by cyper on 16/6/3.
  6. // Copyright © 2016年 Moaz Tech. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10.  
  11. class ViewController: UIViewController,UIPickerViewDelegate {
  12. // 定义要显示两栏数据. 第1栏为尺寸,第2栏为pizza表层的用料
  13. // 分别是奶酪,辣肉肠,香肠,蔬菜 和 烤鸡
  14. let pickerData = [["10\"","BBQ Chicken"]]
  15. enum PickerComponent: Int {
  16. case size = 0
  17. case topping = 1
  18. }
  19. //MARK -Outlets and Properties
  20. @IBOutlet weak var myLabel: UILabel!
  21. @IBOutlet weak var myPicker: UIPickerView!
  22. //MARK - Instance Methods
  23. func updateLabel(){
  24. let szComponent = PickerComponent.size.rawValue
  25. let tpComponent = PickerComponent.topping.rawValue
  26. let size = pickerData[szComponent][myPicker.selectedRowInComponent(szComponent)]
  27. let topping = pickerData[tpComponent][myPicker.selectedRowInComponent(tpComponent)]
  28. myLabel.text = "Pizza: \(size) \(topping)"
  29. }
  30. //MARK - Life Cycle
  31. override func viewDidLoad() {
  32. super.viewDidLoad()
  33. // Do any additional setup after loading the view,typically from a nib.
  34. myPicker.delegate = self
  35. myPicker.dataSource = self
  36. // 默认选中18寸的
  37. myPicker.selectRow(2,inComponent: PickerComponent.size.rawValue,animated: false)
  38. updateLabel()
  39. }
  40. //MARK - Delgates and Data Source
  41. // 一共有多少列,inComponent component: Int) {
  42. updateLabel()
  43. }
  44. }


美化应用.

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

猜你在找的Swift相关文章