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

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

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

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

Xcode

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

Swift

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

Q&A

解決済

1回答

1339閲覧

swiftでボタンが押されたら一番近い時刻を表示させるコードを書いたのですが、refleshcontrolがうまくいきません。

ShintaroOKUMURA

総合スコア21

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2016/12/12 05:22

###前提・実現したいこと
ボタンを押すと時刻応じて一番近いバスの時刻が出るのですが、2枚目のviewcontroleerにrefleshcontrolを使って、更新させる仕様にしているのですが更新してもバスの時刻の結果が変わりません。

###該当のソースコード

swift

1//一つ目のviewcontroller 2class ViewController: UIViewController { 3 //画面から戻ってきたときの処理 4 @IBAction func backToTop(segue: UIStoryboardSegue) { 5 } 6 7 //受け渡す際に使う配列の変数 8 var ukewatasu:String = "" 9 10 //スクールバス四条畷行きの結果をJikokuViewControllerに渡す処理 11 //画面遷移時の処理 12 13 14 override func viewDidLoad() { 15 16 super.viewDidLoad() 17 // Do any additional setup after loading the view, typically from a nib. 18 } 19 20 override func didReceiveMemoryWarning() { 21 super.didReceiveMemoryWarning() 22 // Dispose of any resources that can be recreated. 23 } 24 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 25 if(segue.identifier == "gojikoku") { 26 let jvc: JikokuViewController = (segue.destination as? JikokuViewController)! 27 // ukewatasu = String(describing: result()) 28 if ukewatasu == result() { 29 ukewatasu = result() 30 } else if ukewatasu == result2() { 31 ukewatasu = result2() 32 } else if ukewatasu == result3() { 33 ukewatasu = result3() 34 } else if ukewatasu == result4() { 35 ukewatasu = result4() 36 } else if ukewatasu == result5() { 37 ukewatasu = result5() 38 } else if ukewatasu == result6() { 39 ukewatasu = result6() 40 } 41 jvc.a = ukewatasu 42 } 43 } 44 45 @IBAction func sbSijyou(_ sender: AnyObject) { 46 //result関数を受け取る 47 ukewatasu = result() 48 //performSegue(withIdentifier: "gojikoku",sender: nil) 49 } 50 @IBAction func sbNeyagawa(_ sender: AnyObject) { 51 ukewatasu = result2() 52 53 } 54 @IBAction func kintetuSijyoudentu(_ sender: AnyObject) { 55 ukewatasu = result3() 56 } 57 58 @IBAction func kintetuSijyou(_ sender: AnyObject) { 59 ukewatasu = result4() 60 } 61 62 @IBAction func kintetuKiyotaki(_ sender: AnyObject) { 63 ukewatasu = result5() 64 } 65 66 67 @IBAction func kintetuKiyotaki2(_ sender: AnyObject) { 68 ukewatasu = result6() 69 } 70 71 //スクールバス四条畷 72 func result() -> String { 73 74 let timeFormatter = DateFormatter() 75 timeFormatter.dateFormat = "HH:mm:ss" 76 let nowString = timeFormatter.string(from: NSDate() as Date) 77 let nowTime = timeFormatter.date(from: nowString)! 78 let jikokuArray: [(String, String)] = [("次のバス発車時刻 AM","9:10:00"),("次のバス発車時刻 AM","9:50:00"),("次のバス発車時刻 AM","10:10:00"),("次のバス発車時刻 AM","10:50:00"),("次のバス発車時刻 AM","11:10:00"),("次のバス発車時刻 AM","11:30:00"),("次のバス発車時刻 AM","11:50:00"),("次のバス発車時刻 PM","12:10:00"),("次のバス発車時刻 PM","12:50:00"),("次のバス発車時刻 PM","13:10:00"),("次のバス発車時刻 PM","14:10:00"),("次のバス発車時刻 PM","15:10:00"),("次のバス発車時刻 PM","15:20:00"),("次のバス発車時刻 PM","15:50:00"),("次のバス発車時刻 PM","16:05:00"),("次のバス発車時刻 PM","16:42:00"),("次のバス発車時刻 PM","16:50:00"),("次のバス発車時刻 PM","16:55:00"),("次のバス発車時刻 PM","17:00:00"),("次のバス発車時刻 PM","17:05:00"),("次のバス発車時刻 PM","17:50:00"),("次のバス発車時刻 PM","18:05:00"),("次のバス発車時刻 PM","18:35:00"),("次のバス発車時刻 PM","18:50:00"),("次のバス発車時刻 PM","19:05:00"),("次のバス発車時刻 PM","19:35:00"),("次のバス発車時刻 PM","19:50:00"),("次のバス発車時刻 PM","20:05:00"),("次のバス発車時刻 PM","20:35:00"),("次のバス発車時刻 PM","21:05:00") ] 79 80 81 let resultArray: [(String, String)] = jikokuArray.flatMap({ 82 let diff = timeFormatter.date(from: $0.1) 83 return nowTime.timeIntervalSince(diff ?? nowTime) > 0 ? nil : $0 84 }) 85 86 if resultArray.count > 0, let result = resultArray.first { 87 return "\(result.0):\(result.1)" 88 } else { 89 return "本日のダイヤは終了しました。" 90 } 91 } 92} 93 94//2つ目のviewcontroller 95class JikokuViewController: UIViewController { 96 //60分の秒ごとにタイマーが更新されるプログラム 97 98 var dateFormatter: DateFormatter{ 99 let formatter = DateFormatter() 100 formatter.dateFormat = "yyyy/MM/dd HH:mm:ss" 101 return formatter 102 } 103 104 //受け取る 105 var a:String = "" 106 107 var refreshControl:UIRefreshControl! 108 109 override func viewDidLoad() { 110 super.viewDidLoad() 111 112 113 self.refreshControl = UIRefreshControl() 114 self.refreshControl.attributedTitle = NSAttributedString(string: "引っ張って更新") 115 self.refreshControl.addTarget(self, action: "refresh", for: UIControlEvents.valueChanged) 116 self.tableView.addSubview(refreshControl) 117 118 view.addSubview(timerLabel) 119 120 // 初回 121 updateDateLabel() 122 123 // 一定間隔で実行 124 Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(JikokuViewController.updateDateLabel), userInfo: nil, repeats: true) 125 126 //labelに時刻を表示 127 jikokuLabel.text = a 128 129 // Do any additional setup after loading the view. 130 } 131 132 override func didReceiveMemoryWarning() { 133 super.didReceiveMemoryWarning() 134 // Dispose of any resources that can be recreated. 135 } 136 137 // 日時表示ラベル更新メソッド 138 func updateDateLabel(){ 139 let now = NSDate() 140 timerLabel.text = dateFormatter.string(from: now as Date) 141 } 142 143 func refresh() 144 { 145 146 ViewController() 147 JikokuViewController() 148 jikokuLabel.text = a 149 refreshControl.endRefreshing() 150 } 151 152 @IBOutlet weak var jikokuLabel: UILabel! 153 @IBOutlet weak var timerLabel: UILabel! 154 @IBOutlet weak var tableView: UITableView! 155}

###試したこと
viewcontrollerと時刻の結果を渡す変数ukewatasuも更新の処理をさせるfunc refleshに記述したのですが、動きませんでした。なぜでしょうか。

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

reflesh関数の以下2行が意味不明です。
ViewController()
JikokuViewController()

それとコードを見る限り、a(この変数名もなんとかしましょうw)は前の画面からの遷移時にのみ更新となってます。

投稿2016/12/12 07:39

fromageblanc

総合スコア2724

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

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

ShintaroOKUMURA

2016/12/12 08:06

ご指摘ありがとうございます。 そのコードはコメントアウトするの忘れてました。笑 失礼しました。 画面遷移後の結果を変更するにはどのようにしたら良いのでしょうか。できればヒントいただきたいです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問