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

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

ただいまの
回答率

91.26%

  • Swift

    5306questions

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

  • Xcode

    3022questions

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

タイマーの文字列をテキストフィールドに保存

解決済

回答 1

投稿 編集

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

タイマーに表示されている時間(Labelの文字)を
ボタンをタップで
テキストフィールドに記録する。
と言ったものを作りたいのですが、、、
イメージとしてはタイムラップみたいなものです。

現段階ではタイマーの実装はできています。
機能としては[スタート、ストップ、ラップ、リセット]です。
ラップはテーブルに記録するようになっています。

ラップ部分で、ボタンをタップでテーブルに記録しているところを
テキストフィールドに変えてみたのですが上手くいきませんでした。
具体的には
タイマースタートボタンタップ

タイマーストップボタンタップ(タイマーストップ)

ラップボタンタップ(テキストフィールドにタイム記録)←ここができない

Xcode8
Swift3

ご指摘よろしくお願いします!

import UIKit
import RealmSwift

class ViewController: UIViewController, UIPickerViewDelegate, UITextFieldDelegate,UIImagePickerControllerDelegate, UINavigationControllerDelegate,UIPickerViewDataSource {

    var laps: [String] = []

    var timer = Timer()
    var minutes: Int = 0
    var seconds: Int = 0
    var fractions: Int = 0


    var stopwacthString: String = ""

    var startStopWacth: Bool = true
    var addLap: Bool = false

    @IBOutlet weak var stopwacthLabel: UILabel!
    @IBOutlet weak var todoNameText: UITextField!

    let pickerOptions = [["","白","青"],["","1", "2", "3","4", "5", "6","7", "8", "9","10", "11", "12","13", "14", "15","16", "17", "18","19", "20"],["","AG", "P", "E","ES", "B", "BP","TO", "PG", "EG"]]

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var startstopButton: UIButton!
    @IBOutlet weak var lapresetButton: UIButton!
    @IBOutlet weak var resetButttom: UIButton!

    @IBAction func startStop(_ sender: Any) {

        if startStopWacth == true {

            timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ViewController.updateStopwacth), userInfo: nil, repeats: true)
            startStopWacth = false

            startstopButton.setImage(UIImage(named:"TEISHI.png"), for: .normal)
            lapresetButton.setImage(UIImage(named:"KIROKU.png"), for: .normal)
            addLap = true

        } else {

            timer.invalidate()
            startStopWacth = true

            startstopButton.setImage(UIImage(named:"KAISHI.png"), for: .normal)
            //lapresetButton.setImage(UIImage(named:"Reeset.png"), for: .normal)
            addLap = false


        }
    }

    @IBAction func lapReset(_ sender: Any) {


        if addLap == true {

            laps.insert(stopwacthString, at: 0)
            tableView.reloadData()

        } else {

            addLap = true
            lapresetButton.setImage(UIImage(named: "KIROKU.png"), for: .normal)


            //ラップの記録もリセットする
            //laps.removeAll(keepingCapacity: false)
            //LapsTableView.reloadData()

            //fractions = 0
            //seconds = 0
            //minutes = 0

            //topwacthString = "00:00.00"
            // stopwacthLabel.text = stopwacthString

        }
    }

    @IBAction func NewReset(_ sender: Any) {

        laps.removeAll(keepingCapacity: false)
        tableView.reloadData()

        seconds = 0
        minutes = 0

        stopwacthString = "00:00"
        stopwacthLabel.text = stopwacthString
    }
    var toDoItems:Results<ToDo>?{
        do{
            let realm = try Realm()
            return realm.objects(ToDo.self)
        }catch{
            print("エラー")
        }
        return nil
    }


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


        let pickerview = UIPickerView()
        pickerview.delegate = self
        todoNameText.inputView = pickerview

           }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
        stopwacthLabel.text = "00:00.00"
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {

        return pickerOptions.count

    }
    func  pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        return pickerOptions[component].count

    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

        return pickerOptions[component][row]

    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        let model = pickerOptions[0][pickerView.selectedRow(inComponent: 0)]
        let color = pickerOptions[1][pickerView.selectedRow(inComponent: 1)]
        let AC = pickerOptions[2][pickerView.selectedRow(inComponent: 2)]

        todoNameText.text = model + "        " + color + "       " + AC

    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

        view.endEditing(true)

    }
    func updateStopwacth() {

        fractions += 1
        if fractions == 100 {

            seconds += 1
            fractions = 0
        }
        if seconds == 100 {

            minutes += 1
            seconds = 0
        }

        let franctionsString = fractions > 9 ?"\(fractions)" : "0\(fractions)"
        let secondsString = seconds > 9 ?"\(seconds)" : "0\(seconds)"
        let minutesString = minutes > 9 ?"\(minutes)" : "0\(minutes)"

        stopwacthString = "\(minutesString):\(secondsString)"
        stopwacthLabel.text = stopwacthString
    }

    @IBAction func addToDo(_ sender: Any) {

        if isValidateInputContents() == false{
            return
        }



    // ToDoデータを作成する処理
    let toDo = ToDo()
    toDo.name = todoNameText.text!

    // ToDoデータを永続化する処理
    do{
    let realm = try Realm()
    try realm.write{
    realm.add(toDo)
    }
    todoNameText.text = ""
    }catch{
    print("失敗")
    }
    tableView.reloadData()
}

private func isValidateInputContents() -> Bool{
    // ToDo名のデータ入力
    if let name = todoNameText.text{
        if name.characters.count == 0{
            return false
        }
    }else{
        return false
    }
    return true
}

}


extension ViewController: UITableViewDataSource{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return toDoItems?.count ?? 0
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let toDo = toDoItems?[indexPath.row]


//        let cell1 = UITableViewCell(style: UITableViewCellStyle.value1, reuseIdentifier: "Cell")
//        cell1.backgroundColor = self.view.backgroundColor
//    
//        cell1.detailTextLabel?.text = laps[indexPath.row]

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! ToDoTableViewCell
        // Realmに登録したデータをラベルに値設定
        cell.nameLabel.text = toDo?.name

        print(toDo?.name)


        return cell

    }



// 削除処理
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == UITableViewCellEditingStyle.delete {

            let realm = try!Realm()

            _ = try!Realm().objects(ToDo.self)

            // これはRealmSwiftでデータを削除しているケース
            let deleteHistory = self.toDoItems?[indexPath.row]
            // トランザクションを開始してオブジェクトを削除します
            try! realm.write {
                realm.delete(deleteHistory!)
            }


            // TableViewを再読み込み.
            self.tableView.reloadData()


        }

    }



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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • fuzzball

    2017/12/13 10:36

    「上手くいきませんでした」を具体的に書いて下さい。

    キャンセル

回答 1

checkベストアンサー

0

todoNameText.text = (その時の時間)
で表示は出来ると思います

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/15 09:38

    ありがとうございました!できました!

    キャンセル

  • 2017/12/15 09:45

    よかったです!

    キャンセル

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

ただいまの回答率

91.26%

関連した質問

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

  • Swift

    5306questions

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

  • Xcode

    3022questions

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