質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

869閲覧

SwiftでUITableViewCell内でUIPickerViewを使う方法

yamayamak

総合スコア131

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

0クリップ

投稿2017/07/21 15:06

SwiftでUITableViewCell内でUIPickerViewを使う方法を教えてください。

UITableViewCell内でUIPickerViewを使っていますが、UITableView内のどのCELL(UITableViewCell)が選択されているかを取得するため、以下のようなコードを記載していますが、該当CellのPickerを選択しても以下のところで取得されません。
(ブレークしても止まりません。)
Pickerで選択した値を、UITableViewCell内に表示したいのですが、できないので教えてください。

抜粋ですが、以下のようなコードを書いてトライしています。どのように直せば良いかご教授ください。

Swift

1class setMacroViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITableViewDelegate, UITableViewDataSource { 2 private var tableCellIndexPath:IndexPath! 3 4 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 5 tableCellIndexPath = indexPath 6 } 7 8 //列を選択した時 9 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 10 curSelectedData = nextWaitlist[row] 11 } 12 13 //PickerViewで選択後に「完了」を押した時の処理 14 func done() { 15 let cell = macroTableView.cellForRow(at:tableCellIndexPath) as! macroTableViewCell 16 cell.macroNextWait.text = curSelectedData 17 self.view.endEditing(true) 18 } 19} 20 21class macroTableViewCell: UITableViewCell, UITextFieldDelegate { 22 @IBOutlet weak var macroNextWait: UITextField! 23 weak var delegate: TextFieldEditCellDelegate! = nil 24 25 override func awakeFromNib() { 26 super.awakeFromNib() 27 // Initialization code 28 macroNextWait.delegate = self 29 } 30 31 override func setSelected(_ selected: Bool, animated: Bool) { 32 super.setSelected(selected, animated: animated) 33 } 34 35 /// STEP名を設定するメソッド 36 func setCell(pickerView: UIPickerView, toolbar: UIToolbar) { 37 macroNextWait.inputView = pickerView 38 macroNextWait.inputAccessoryView = toolbar 39 } 40}
uzihamada👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

UITableViewCell内でUIPickerViewを設定した場合に、UITextFieldにPickerViewを設定しているんですが、Pikerを選択してToolBarを表示しても以下のtableviewは反応しませんでした。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath)

他も色々試しましたがNGでした。didSelectRowAtはセル自体を選択すると反応しますがセル内のPickerを選択しても反応しません。

そのため、以下のようにUITableViewCell内のUITextFieldをUIViewControllerにdelegate設定し、textFieldDidBeginEditingで編集中のUITextFieldを取得して、その座標から該当セルを取得(indexPathを取得してからセルを取得)しました。

色々ハマりましたので共有します。
UIPickerViewなど多くの記載は省略してます(標準の記載で問題ないため)が、今回のポイント部分のみ以下に記載しておきます。

swift

1class testViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate { 2 3 internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 4 if let cell = tableView.dequeueReusableCell(withIdentifier: "testCell", for: indexPath) as? testTableViewCell { 5 cell.textfield1.delegate = self 6 return cell 7 } 8 return UITableViewCell() 9 } 10 11 12 func textFieldDidBeginEditing(_ textField: UITextField) { 13 curActiveObj = textField 14 } 15 16 func done() { 17 let point = self.macroTableView.convert(curActiveObj.frame.origin, from: curActiveObj.superview) 18 if let indexPath = self.macroTableView.indexPathForRow(at: point) { 19 print("section: \(indexPath.section) - row: \(indexPath.row)") 20 let cell = macroTableView.cellForRow(at:indexPath) as! macroTableViewCell 21 cell.endEditing(true) 22 } 23 } 24}

投稿2017/07/21 23:28

yamayamak

総合スコア131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問