###前提・実現したいこと
簡単な計算アプリで、textFieldをタップすると選択肢が表示され、選択された文字列によって違うアクション・計算を行いたかったので下記のように記入し、xcode場でも特にエラーメッセージは表示されなかったのですが、ビルドした際、選択しても計算結果が表示されませんでした。
下記の記述の仕方に間違いはありますか?
###該当のソースコード
var a = Double() var b = Double() var price = Double() @IBAction func koutiku(_ sender: PickerTextField) { if koutikuTextField.pickerDataArray == ["新規構築"]{ a = a + 10 } else if koutikuTextField.pickerDataArray == ["再構築"]{ a = a + 12 } } @IBAction func nanido(_ sender: PickerTextField) { if nanidoTextField.pickerDataArray == ["難しい"]{ b = b + 11 } if nanidoTextField.pickerDataArray == ["普通"]{ b = b + 13 } else if nanidoTextField.pickerDataArray == ["易しい"]{ b = b + 15 } }
###Pickerのコード
import Foundation import UIKit @objc protocol PickerTextFieldDelegate: class { @objc optional func pushDoneButton(pickerTextField: PickerTextField, text: String) @objc optional func pushCancelButton(pickerTextField: PickerTextField) } class PickerTextField: UITextField, UIPickerViewDelegate, UIPickerViewDataSource { weak var pickerTextFieldDelegate: PickerTextFieldDelegate? private let pickerView = UIPickerView() private let toolbarHeight: CGFloat = 44 var pickerDataArray = [String]() { didSet { if let selectText = pickerDataArray.first { self.selectText = selectText } } } private var selectText: String = "" var defaultText: String! { get { return self.text } set { if let selectIndex = pickerDataArray.index(of: newValue) { pickerView.selectRow(selectIndex, inComponent: 0, animated: false) } self.text = newValue } } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.tintColor = UIColor.clear pickerView.delegate = self pickerView.dataSource = self } // 入力カーソル非表示 override func caretRect(for position: UITextPosition) -> CGRect { return CGRect.zero } // 範囲選択カーソル非表示 override func selectionRects(for range: UITextRange) -> [Any] { return [] } // コピー・ペースト・選択等のメニュー非表示 override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { return false } override var inputAccessoryView: UIView? { get { let toolBar = UIToolbar() toolBar.barStyle = UIBarStyle.default toolBar.isTranslucent = true toolBar.tintColor = UIColor.black let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(self.pushDoneButton)) let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.pushCancelButton)) let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) toolBar.isUserInteractionEnabled = true toolBar.sizeToFit() return toolBar } set {} } override var inputView: UIView? { get { (self.value(forKeyPath: "textInputTraits") as AnyObject).setValue(UIColor.clear, forKey: "insertionPointColor") self.tintColor = UIColor.clear pickerView.frame = CGRect(x: 0, y: toolbarHeight, width: UIScreen.main.bounds.size.width, height: pickerView.bounds.size.height) pickerView.backgroundColor = UIColor.white return pickerView } set {} } // Done @objc private func pushDoneButton() { self.text = selectText pickerTextFieldDelegate?.pushDoneButton?(pickerTextField: self, text: selectText) resignFirstResponder() } // Cancel @objc private func pushCancelButton() { pickerTextFieldDelegate?.pushCancelButton?(pickerTextField: self) resignFirstResponder() } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return pickerDataArray[row] } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return pickerDataArray.count } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { selectText = pickerDataArray[row] } }
###試したこと
遷移画面後での計算結果を表示する仕様だったので、もしや計算はできているけど送る方法に間違いがあるのかと思い、同じ画面にラベルを置いてデータを受け取るようにしたのですがうまく行きませんでした。
あなたの回答
tips
プレビュー