Sop*_*mer 1 enums uipickerview ios swift
我正在创建一个简单的视图,其中有一个UIPickerView,我想从枚举中显示PickerView上的选项.我创造了一种可能的饮料
enum drink{
case coffee
case tea
case cola
case water
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何在UIPickerView中显示饮料?我正在使用Swift 1.2和Xcode 6.3.1 ..谢谢!! :)
如上所述,ABakerSmith您可以使用Printable协议显示String在UIPickerView.
最后,您可以ViewController看到以下内容:
//
// ViewController.swift
// Test
//
// Created by Stefan Veis Pennerup on 04/05/15.
// Copyright (c) 2015 Kumuluzz. All rights reserved.
//
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
@IBOutlet weak var pickerView: UIPickerView!
enum Drink: Int, Printable {
case Coffee = 0
case Tea = 1
case Cola = 2
case Water = 3
static var count: Int { return Drink.Water.hashValue + 1 }
var description: String {
switch self {
case .Coffee: return "Coffee"
case .Tea : return "Tea"
case .Cola : return "Cola"
case .Water : return "Water"
default: return ""
}
}
}
// MARK: - UIPickerViewDataSource
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return Drink.count.hashValue
}
// MARK: - UIPickerViewDelegate
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return Drink(rawValue: row)?.description;
}
// several optional methods:
// func pickerView(pickerView: UIPickerView!, widthForComponent component: Int) -> CGFloat
// func pickerView(pickerView: UIPickerView!, rowHeightForComponent component: Int) -> CGFloat
// func pickerView(pickerView: UIPickerView!, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString!
// func pickerView(pickerView: UIPickerView!, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView!
// func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
}
Run Code Online (Sandbox Code Playgroud)
Apple 在 Swift 4.2 / Xcode 10+ 中引入了CaseIterable,这使得它更干净。
编译器可以自动为任何枚举提供 CaseIterable 要求的实现,而无需在其案例上关联值或 @available 属性。合成的 allCases 集合按照声明的顺序提供案例。
例子:
enum Drink: String, CaseIterable {
case coffee = "Coffee"
case tea = "Tea"
case cola = "Cola"
case water = "Water"
}
extension ViewController: UIPickerViewDelegate {
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return Drink.allCases[row].rawValue
}
}
extension ViewController: UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return Drink.allCases.count
}
}
Run Code Online (Sandbox Code Playgroud)
UITextField您可以在Github上找到使用的完整示例
| 归档时间: |
|
| 查看次数: |
3619 次 |
| 最近记录: |