現在誕生日のカウントダウン+通知アプリを作っています。
今実装している機能は、通知する日にちと時間を入力する機能です。
そこで、通知する日時を入力する欄をTextFieldとPickerViewを使って作りました。(こちらの記事を参考にしました)
しかし、日にちを入力するTextFieldと時間を入力するTextFieldとそれぞれ二つあり、それぞれのTextFieldをタップするとPickerVIewが出てきて数字が選択できる仕様にしたいと思っています。
色々試したのですが、TextField1とTextField2で条件分岐させてそれぞれ違うPickerViewを表示させるにはどうすればよいでしょうか。ちなみに、TextField1にはlist1を、TextField2にはlist2を要素としてもったPickerViewを表示したいです。
下に載せたコードはどちらのTextFieldを入力してもlist1のPickerViewが出てきて、textField1に入力される用になっています。
今までに試した方法はtagで条件分岐させる方法だったのですがうまく場合分けしてくれません。。。
環境はxcode Version 10.1, Swift4です。
よろしくお願いします。
swift
1import UIKit 2 3class ContainerViewController: UITableViewController, UIPickerViewDelegate, UIPickerViewDataSource { 4 5 @IBOutlet weak var textField1: UITextField! 6 @IBOutlet weak var textField2: UITextField! 7 8 let appDelegate = UIApplication.shared.delegate as! AppDelegate 9 10 var pickerView: UIPickerView = UIPickerView() 11 let list1 = ["", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"] 12 let list2 = ["","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23"] 13 14 override func viewDidLoad() { 15 super.viewDidLoad() 16 17 pickerView.delegate = self 18 pickerView.dataSource = self 19 pickerView.showsSelectionIndicator = true 20 21 let toolbar = UIToolbar(frame: CGRectMake(0, 0, 0, 35)) 22 let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ContainerViewController.done)) 23 let cancelItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(ContainerViewController.cancel)) 24 toolbar.setItems([cancelItem, doneItem], animated: true) 25 26 self.textField1.inputView = pickerView 27 self.textField1.inputAccessoryView = toolbar 28 self.textField2.inputView = pickerView 29 self.textField2.inputAccessoryView = toolbar 30 31 tableView.isScrollEnabled = false 32 33 } 34 35 // MARK: - Table view data source 36 37 38 override func numberOfSections(in tableView: UITableView) -> Int { 39 // #warning Incomplete implementation, return the number of sections 40 return 1 41 } 42 43 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 44 45 46 return 3 47 } 48 49 //PickerView設定 50 51 func numberOfComponents(in pickerView: UIPickerView) -> Int { 52 return 1 53 } 54 55 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 56 57 return list1.count 58 59 } 60 61 62 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 63 64 return list1[row] 65 66 } 67 68 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 69 70 self.textField1.text = list1[row] 71 72 } 73 74 @objc func cancel() { 75 self.textField1.text = "" 76 self.textField1.endEditing(true) 77 } 78 79 @objc func done() { 80 81 appDelegate.number1 = Int(textField1.text!) 82 self.textField1.endEditing(true) 83 84 } 85 86 func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect { 87 return CGRect(x: x, y: y, width: width, height: height) 88 } 89 90 override func didReceiveMemoryWarning() { 91 super.didReceiveMemoryWarning() 92 // Dispose of any resources that can be recreated. 93 } 94
<追記>
今までに試したtagで条件分岐させる方法
storyboard上でtextField1にtag1, textField2にtag2を入力。
swift
1import UIKit 2 3class ContainerViewController: UITableViewController, UIPickerViewDelegate, UIPickerViewDataSource { 4 5 @IBOutlet weak var notificationTextField: UITextField! 6 7 let appDelegate = UIApplication.shared.delegate as! AppDelegate 8 9 var pickerView: UIPickerView = UIPickerView() 10 let list1 = ["", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"] 11 let list2 = ["","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23"] 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 16 pickerView.delegate = self 17 pickerView.dataSource = self 18 pickerView.showsSelectionIndicator = true 19 20 let toolbar = UIToolbar(frame: CGRectMake(0, 0, 0, 35)) 21 let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ContainerViewController.done)) 22 let cancelItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(ContainerViewController.cancel)) 23 toolbar.setItems([cancelItem, doneItem], animated: true) 24 25 self.notificationTextField.inputView = pickerView 26 self.notificationTextField.inputAccessoryView = toolbar 27 28 tableView.isScrollEnabled = false 29 30 } 31 32 // MARK: - Table view data source 33 34 35 override func numberOfSections(in tableView: UITableView) -> Int { 36 // #warning Incomplete implementation, return the number of sections 37 return 1 38 } 39 40 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 41 42 return 3 43 } 44 45 //PickerView設定 46 47 func numberOfComponents(in pickerView: UIPickerView) -> Int { 48 49 return 1 50 51 } 52 53 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 54 55 if view.tag == 1{ 56 return list1.count 57 }else{ 58 return list2.count 59 } 60 61 } 62 63 64 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 65 66 if view.tag == 1{ 67 return list1[row] 68 }else{ 69 return list2[row] 70 } 71 72 } 73 74 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 75 76 if view.tag == 1{ 77 self.notificationTextField.text = list1[row] 78 }else{ 79 self.notificationTextField.text = list2[row] 80 } 81 82 } 83 84 @objc func cancel() { 85 if view.tag == 1{ 86 self.notificationTextField.text = "" 87 self.notificationTextField.endEditing(true) 88 } 89 } 90 91 @objc func done() { 92 if view.tag == 1{ 93 appDelegate.number1 = Int(notificationTextField.text!) 94 self.notificationTextField.endEditing(true) 95 }else{ 96 appDelegate.number2 = Int(notificationTextField.text!) 97 self.notificationTextField.endEditing(true) 98 } 99 100 } 101 102 func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect { 103 return CGRect(x: x, y: y, width: width, height: height) 104 } 105 106 override func didReceiveMemoryWarning() { 107 super.didReceiveMemoryWarning() 108 // Dispose of any resources that can be recreated. 109 } 110 111} 112
これでそれぞれのTextFieldをnotificationTextFieldにOutlet接続したら条件分岐するかなと思ったらIBOutletは一つずつしか接続できなくてできませんでした。
回答3件
あなたの回答
tips
プレビュー