Swift에서 텍스트 필드에 선택기 설정 및 목록 선택(콤보 상자)
개요
이런거.

텍스트 필드를 탭하면 아래에 피커가 표시됩니다.
콤보 박스적인 이미지입니다.
Xcode(8.1)의 표준 컴퍼넌트에는 이런 것은 없기 때문에(없지요?), 시코시코 구현합니다.
StoryBoard
먼저 StoryBoard에 Text Filed를 배치하고 ViewController에 Outlet에 연결합니다.
이런 상태.

ViewController
아래 소스 전체.
ViewController.swiftimport 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
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 {
상속하면 다음 세 가지 함수를 구현해야 합니다.
구현할 때까지 오류가 발생합니다.
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]
라고 하면 필수가 된다고 생각합니다.
Reference
이 문제에 관하여(Swift에서 텍스트 필드에 선택기 설정 및 목록 선택(콤보 상자)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/naoki_koreeda/items/6f3057012b52979fcd9c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
먼저 StoryBoard에 Text Filed를 배치하고 ViewController에 Outlet에 연결합니다.
이런 상태.

ViewController
아래 소스 전체.
ViewController.swiftimport 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
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 {
상속하면 다음 세 가지 함수를 구현해야 합니다.
구현할 때까지 오류가 발생합니다.
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]
라고 하면 필수가 된다고 생각합니다.
Reference
이 문제에 관하여(Swift에서 텍스트 필드에 선택기 설정 및 목록 선택(콤보 상자)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/naoki_koreeda/items/6f3057012b52979fcd9c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
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.
}
}
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
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?
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]
라고 하면 필수가 된다고 생각합니다.

Reference
이 문제에 관하여(Swift에서 텍스트 필드에 선택기 설정 및 목록 선택(콤보 상자)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/naoki_koreeda/items/6f3057012b52979fcd9c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)