ios개발

<ios개발> 한 뷰컨트롤러에서 두개의 UIPickerView 사용하기, UIToolBar 붙이기.

studying develop 2020. 12. 29. 23:08

이런식으로 입력 창을 두개 만들고 싶었다. 나이 눌러도 위 화면처럼 뜨고, 키 선택해도 위 화면처럼 뜨도록 ㅎㅎ...

 

근데 코드를 작성해보니 안되더라, 바로 밑에는 성공, 그 밑에는 실패다.

 

import UIKit

class LoginViewController: UIViewController {

    @IBOutlet weak var ageTextField: UITextField!
    @IBOutlet weak var heightTextField: UITextField!
    
    var list1 = ["1", "2"]
    var list2 = ["a", "b"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        createPickerView()
        dismissPickerView()
    }
    
    func createPickerView() {
        
        let pickerView2 = UIPickerView()
        pickerView2.delegate = self
        heightTextField.inputView = pickerView2
        
        let pickerView1 = UIPickerView()
        pickerView1.delegate = self
        ageTextField.inputView = pickerView1
        
    }
    
    func dismissPickerView() {
        let toolBar1 = UIToolbar()
        toolBar1.sizeToFit()
        let button1 = UIBarButtonItem(title: "선택", style: .plain, target: self, action: #selector(buttonPressed))
        toolBar1.setItems([button1], animated: true)
        toolBar1.isUserInteractionEnabled = true
        ageTextField.inputAccessoryView = toolBar1
        
        heightTextField.inputAccessoryView = toolBar1
    }
    
    @objc private func buttonPressed(_ sender: Any) {
        self.view.endEditing(true)
    }
}

성공한코드

 

 

import UIKit

class LoginViewController: UIViewController {

    @IBOutlet weak var ageTextField: UITextField!
    @IBOutlet weak var heightTextField: UITextField!
    
    var list1 = ["1", "2"]
    var list2 = ["a", "b"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        createPickerView()
        dismissPickerView()
    }
    
    func createPickerView() {
        let pickerView1 = UIPickerView()
        pickerView1.delegate = self
        ageTextField.inputView = pickerView1
        
        let pickerView2 = UIPickerView()
        pickerView2.delegate = self
        heightTextField.inputView = pickerView2
    }
    
    func dismissPickerView() {
        let toolBar1 = UIToolbar()
        toolBar1.sizeToFit()
        let button1 = UIBarButtonItem(title: "선택", style: .plain, target: self, action: #selector(buttonPressed))
        toolBar1.setItems([button1], animated: true)
        toolBar1.isUserInteractionEnabled = true
        ageTextField.inputAccessoryView = toolBar1
        
        let toolBar2 = UIToolbar()
        toolBar2.sizeToFit()
        let button2 = UIBarButtonItem(title: "선택", style: .plain, target: self, action: #selector(buttonPressed))
        toolBar2.setItems([button2], animated: true)
        toolBar2.isUserInteractionEnabled = true
        ageTextField.inputAccessoryView = toolBar2
    }
    
    @objc private func buttonPressed(_ sender: Any) {
        self.view.endEditing(true)
    }
}

실패한코드

 

아래와 위의 코드의 차이는, toolBar2를 새로 할당 했느냐 안했느냐 인데, 이게 참 밑에는 그래도 별개의 UIToolBar로 될거 같은데 안된다. 실행해 보면 키 부분은 툴바 "선택" 부분이 없음.

 

아래 코드로 실행한 결과임. 왜그러지?