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

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

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

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

Q&A

1回答

1784閲覧

Swift:UIAlert上のUITextFieldにUIDatePickerで選択した時間を更新したい

oname

総合スコア10

Swift

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

0グッド

0クリップ

投稿2019/04/21 13:10

前提・実現したいこと

SwiftでUIAlertControllerを使っています。
その中にtextFieldを表示し、その中の値をDatePickerを使って入力できるようにしています。

しかし、textFieldの中をDatePickerが回るたびに更新するようにコードがうまく書けません。
うまく更新できる方法、または、textField自体を非表示にして、DatePickerのみの表示にしてしまう方法がございましたら、ご教示いただきたいです。

プログラミングを始めたばかりで、拙い説明になるかもしれませんが何卒ご容赦ください。

発生している問題・エラーメッセージ

addtargetをつかって関数を呼び出し、更新させようとするとエラーが出て止まります。
場所はAppDelegateのクラスの宣言のところです。

エラーメッセージ

Thread 1: signal SIGABRT

該当のソースコード

// UIdatepickerで予定時刻入力 alert2.addTextField (configurationHandler: { (dateText:UITextField!) -> Void in self.datePicker.datePickerMode = .time dateText.inputView = self.datePicker dateText.inputAccessoryView = self.toolBar self.datePicker.addTarget(self, action: Selector(("datePickerValueChanged:")), for: UIControl.Event.valueChanged) }) //datepickerを回した時にtextFieldを更新する関数 func datePickerValueChanged(sender:UIDatePicker, textfield:UITextField) { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "hh:mm"; textfield.text = dateFormatter.string(from: sender.date) }

試したこと

おそらく、datePickerValueChangedで指定している引数に問題があるのではないかと思っています。
senderはselfで場所を指定したいのですが、textfieldはAlert内のdateTextを指定したいです。
addtargetでtargetがselfで指定しているので問題が起きているのではないかと推測して、targetを分ける方法や、addtextfieldでViewController内のUITextFieldの定数を指定する方法を探してみたのですが、見つかりませんでした。

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

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

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

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

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

fuzzball

2019/04/22 01:11

コードは ``` で囲って下さい。 https://teratail.com/help#about-markdown 「Thread 1: signal SIGABRT」はエラーメッセージじゃないです。Consoleに表示されているエラーメッセージを書いて下さい。
guest

回答1

0

addTargetの使い方が間違っています。

セレクターは現在は#selector(...)を使います。
また、呼び出される側の引数はせいぜいsender一個(詳細はこちら)なので、勝手にtextfieldなどの引数を追加しないでください。
また、@objcキーワードが必要です。

未検証ですが、例えば以下のように書きます。

swift:

1var alertTextField: UITextField? 2 3alert2.addTextField (configurationHandler: { (dateText:UITextField!) -> Void in 4 5 self.alertTextField = dateText 6 self.datePicker.datePickerMode = .time 7 dateText.inputView = self.datePicker 8 dateText.inputAccessoryView = self.toolBar 9 10 self.datePicker.addTarget(self, action: #selector(datePickerValueChanged:), for: UIControl.Event.valueChanged) 11 12}) 13 14//datepickerを回した時にtextFieldを更新する関数 15@objc func datePickerValueChanged(_ sender: UIDatePicker) { 16 let dateFormatter = DateFormatter() 17 dateFormatter.dateFormat = "hh:mm"; 18 alertTextField?.text = dateFormatter.string(from: sender.date) 19}

投稿2019/05/08 07:56

takabosoft

総合スコア8356

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問