PICKERVIEW
이런.
텍스트 필드를 누르면 아래 선택기가 표시됩니다.
콤보 상자 인 이미지입니다.
Xcode (8.1)의 표준 구성 요소는 이런 것은 아니기 때문에 (없지요?) 쫄깃 쫄깃한 구현합니다.
StoryBoard
우선 StoryBoard에 Text Filed을 배치하여 ViewController에 Outlet 연결되어 있어야합니다.
ViewController
다음 소스 전체.
ViewController.swift
import UIKit
class ViewController : UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var textField : UITextField!
var pickerView : UIPickerView = UIPickerView ()
let list = [ "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
override func viewDidLoad () {
super. viewDidLoad ()
pickerView.delegate = self as? UIPickerViewDelegate
pickerView. dataSource = self
pickerView. showsSelectionIndicator = true
let toolbar = UIToolbar (frame : CGRectMake (0, 0, 0, 35))
let doneItem = UIBarButtonItem (barButtonSystemItem :. done, target : self, action : #selector (ViewController. done))
let cancelItem = UIBarButtonItem (barButtonSystemItem :. cancel, target : self, action : #selector (ViewController. cancel))
toolbar. setItems ([cancelItem, doneItem], animated : true)
self. textField. inputView = pickerView
self. textField. inputAccessoryView = toolbar
}
func numberOfComponents (in pickerView : UIPickerView) -> Int {
return 1
}
func pickerView (_ pickerView : UIPickerView, numberOfRowsInComponent component : Int) -> Int {
return list.count
}
func pickerView (_ pickerView : UIPickerView, titleForRow row : Int, forComponent component : Int) -> String? {
return list [row]
}
func pickerView (_ pickerView : UIPickerView, didSelectRow row : Int, inComponent component : Int) {
self.textField.text = list [row]
}
func cancel () {
self.textField.text = ""
self.textField.endEditing (true)
}
func done () {
self.textField.endEditing (true)
}
func CGRectMake (_ x : CGFloat _ y : CGFloat _ width : CGFloat _ height : CGFloat) -> CGRect {
return CGRect (x : x, y : y, width : width, height : height)
}
override func didReceiveMemoryWarning () {
super. didReceiveMemoryWarning ()
// Dispose of any resources that can be recreated.
}
}
조금 설명.
클래스는 UIPickerViewDelegate과 UIPickerViewDataSource을 상속해야합니다.
class ViewController : UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
상속하면 다음의 3 가지 기능을 구현해야합니다.
구현까지 오류가 나옵니다.
func numberOfComponents (in pickerView : UIPickerView) -> Int
func pickerView (_ pickerView : UIPickerView, numberOfRowsInComponent component : Int) -> Int
func pickerView (_ pickerView : UIPickerView, titleForRow row : Int, forComponent component : Int) -> String?
또한 Swift3.0에서는 CGRectMake라는 좌표를 지정하는 기능을 사용할 수 없게되어 있기 때문에 스스로 Wrap하는 함수를 만들어 둡니다.
func CGRectMake (_ x : CGFloat _ y : CGFloat _ width : CGFloat _ height : CGFloat) -> CGRect {
return CGRect (x : x, y : y, width : width, height : height)
}
필수 선택하려는 경우
선택 목록에서 공백을 제외한다.
// let list = [ "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
let list =["1","2","3","4","5","6","7","8","9","10"]
Cancel을 누르면 삭제하도록하고 있기 때문에, Cancel 자체 없앤다.
let toolbar = UIToolbar (frame : CGRectMake (0, 0, 0, 35))
let doneItem = UIBarButtonItem (barButtonSystemItem :. done, target : self, action : #selector (ViewController. done))
// let cancelItem = UIBarButtonItem (barButtonSystemItem : .cancel, target : self, action : #selector (ViewController.cancel))
//toolbar.setItems([cancelItem, doneItem, animated : true)
toolbar. setItems (doneItem, animated : true)
viewDidLoad ()에서 초기 값을 설정한다.
self. textField. text = list [0]
라고하면 필수가 될 것으로 생각합니다.