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

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

ただいまの
回答率

92.07%

  • Swift

    3334questions

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

  • Xcode

    1945questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

DatePickerの値選択時の表示エラーが直らない

解決済

回答 1

投稿 2017/01/11 16:05

  • 評価
  • クリップ 0
  • VIEW 75

reveco

score 2

前提・実現したいこと

DatePickerの値選択時の表示エラーが直らない

発生している問題

質問が2回目の初心者です。
DatePicker.modeにカウントダウンタイマーを設定し、値が変わるたびにTextFieldの表示内容を変更したいのですが、DatePickerの値を1回変えてもTextFielの表示が変更されません。

デバッグを繰り返した結果、2回ほどDatePickerの値を変更するとTextFieldの表示内容が変わるところまでは確認が取れています。さらに言うと、DatePicker.modeにtimeを設定し直すと通常どうりに作動します。これはカウントダウンタイマーの仕様なのでしょうか?それともDatePickerの値が変更された時に入るfuncに入っていないのでしょうか?

デバッグやコード変更等をしても解決できなかったのでアドバイス等頂けましたら幸いです。宜しくお願い致します。

該当のソースコード

import UIKit

class TableViewController: UITableViewController {

    // TextFieldの宣言
    var textField = UITextField()

    // 初期表示処理
    override func viewDidLoad() {
        super.viewDidLoad() 

        // DatePicker作成関数呼び出し
        mkDpPicker()

    }    

    // DaPicker作成
    func mkDpPicker() {

        // TextFieldのレイアウト設定
        textField = UITextField(frame: CGRect(x: 125, y: 43, width: 150, height: 40))
        textField.borderStyle = .roundedRect
        textField.textAlignment = NSTextAlignment.center          
        self.view.addSubview(textField)

        // DatePickerのレイアウト設定
        datePicker.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: dpSTime.bounds.size.height)

       // TextFieldとDatePickerの結びつけを行う
        textField.inputView = datePicker

        // dateFormatterを生成
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = ""HH時間mm分""

        // countDownTimerを設定
        self.datePicker.datePickerMode = UIDatePickerMode.countDownTimer

        // 値が変わった際のイベントを設定
        self.datePicker.addTarget(self, action: (#selector(self.onDidChangeDate(_:))), for: .valueChanged)

    }

    // DatePickerの値が変わった際に呼ばれる処理
    func onDidChangeDate(_ picker: UIDatePicker) {

        // dateFormatterを生成
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH時間mm分"

        let mySelectionDate: NSString = dateFormatter.string(from: picker.date) as NSString

        textField.text = mySelectionDate as String

    }

}

補足情報(言語/FW/ツール等のバージョンなど)

swift3.0
xcode8.1

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

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

    クリップした質問はマイページの「クリップ」タブからいつでも見ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

UIDatePicker bug? UIControlEventValueChanged after hitting minimum internal

バグのようですね。
ベストアンサーは付いていませんが、私の環境(iOS9+Swift2)でもここに書かれている回答で回避できました。

Swift3っぽく書いておきます。(動作未確認)

DispatchQueue.main.async {
    self.datePicker.countDownDuration = (初期値)
}

投稿 2017/01/11 17:00

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/01/11 18:20

    アドバイスありがとうございます。この遅延実行を行うクロシージャはどこに記述すればいいのでしょうか?

    スタックオーバーフローの内容を見てfuncの中に書いて色々とパターンを試してみたのですが、target-action methodがどこかよく分からずバグが直りませんでした。

    キャンセル

  • 2017/01/11 18:26 編集

    mkDpPicker()内の、
    self.datePicker.datePickerMode = UIDatePickerMode.countDownTimer
    の下でいいと思いますが。

    キャンセル

  • 2017/01/11 20:41

    ありがとうございます!無事にtextField内の表示が一回の操作で変更できるようになりました!

    前回の質問に引き続き御回答ありがとうございました。

    キャンセル

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

ただいまの回答率

92.07%

関連した質問

同じタグがついた質問を見る

  • Swift

    3334questions

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

  • Xcode

    1945questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

閲覧数の多いXcodeの質問