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

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

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

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

Swift

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

Q&A

解決済

1回答

3135閲覧

UIDatepickerで設定し取得した時間の値を用いて、その時間に通知させる方法について。

sdnco

総合スコア21

Xcode

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

Swift

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

0グッド

1クリップ

投稿2016/06/05 06:57

こんにちは。UIDatepickerで設定し取得した時間の値を用いて、その時間に通知を送りたいです。でも、UIDatepickerで取得できる値は例えば「15時30分」に設定したら「15:30」という値で取得すると思います。これを通知する時間に設定する場合、「15」という時の値と「30」という分の値としてそれぞれ切り分けて扱いたいのですがそのやり方がいまいちわかりません。どうかご教授お願いしますm(_ _)m
以下は現状のソースコードです。

swift

1import UIKit 2 3class ViewController: UIViewController, UIPickerViewDelegate { 4 private var myTextField: UITextField! 5 6 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 let now = NSDate() 11 println(now);// -> 2015-09-15 23:06:47 +0000 12 let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian) 13 var comps:NSDateComponents = calendar!.components(NSCalendarUnit.HourCalendarUnit|NSCalendarUnit.MinuteCalendarUnit|NSCalendarUnit.SecondCalendarUnit,fromDate: now) 14 comps.calendar = calendar; 15 16 17 comps.hour = 15; //ここの15と30に、datepickerで取得した値を持っていきたい。 18 comps.hour = 30; // 19 20 21 22 let now2 = comps.date; 23 println(now2);// -> Optional(0000-12-31 22:47:48 +0000) 24 var notification = UILocalNotification() 25 notification.alertBody = "test" 26 notification.timeZone = NSTimeZone.defaultTimeZone(); 27 notification.fireDate = now2; 28 notification.repeatInterval = NSCalendarUnit.CalendarUnitDay; 29 UIApplication.sharedApplication().scheduleLocalNotification(notification) 30 31 32 self.view.backgroundColor = UIColor.whiteColor() 33 34 // DatePickerを生成する. 35 let myDatePicker: UIDatePicker = UIDatePicker() 36 37 // datePickerを設定(デフォルトでは位置は画面上部)する. 38 myDatePicker.frame = CGRectMake(0, 50, self.view.frame.width, 200) 39 myDatePicker.timeZone = NSTimeZone.localTimeZone() 40 myDatePicker.backgroundColor = UIColor.whiteColor() 41 myDatePicker.layer.cornerRadius = 5.0 42 myDatePicker.layer.shadowOpacity = 0.5 43 44 // 値が変わった際のイベントを登録する. 45 myDatePicker.addTarget(self, action: "onDidChangeDate:", forControlEvents: .ValueChanged) 46 47 // DataPickerをViewに追加する. 48 self.view.addSubview(myDatePicker) 49 50 // UITextFieldを作成する. 51 myTextField = UITextField(frame: CGRectMake(0,0,200,30)) 52 myTextField.text = "" 53 myTextField.borderStyle = UITextBorderStyle.RoundedRect 54 myTextField.layer.position = CGPoint(x: self.view.bounds.width/2,y: self.view.bounds.height - 100); 55 56 println(cnt) 57 58 // UITextFieldをViewに追加する. 59 self.view.addSubview(myTextField) 60 } 61 62 /* 63 DatePickerが選ばれた際に呼ばれる. 64 */ 65 internal func onDidChangeDate(sender: UIDatePicker){ 66 67 // フォーマットを生成. 68 let myDateFormatter: NSDateFormatter = NSDateFormatter() 69 myDateFormatter.dateFormat = "HH:mm" //"yyyy/MM/dd hh:mm" 70 71 // 日付をフォーマットに則って取得. 72 let mySelectedDate: NSString = myDateFormatter.stringFromDate(sender.date) 73 myTextField.text = mySelectedDate as String 74 println(mySelectedDate) 75 var hour = mySelectedDate 76 } 77 78 override func didReceiveMemoryWarning() { 79 super.didReceiveMemoryWarning() 80 } 81 82} 83 84 85

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問の意味があまり理解できなかったのですが、UIDatePickerで決めた時間に通知をするという理解でよろしいでしょうか?

その場合、UIDatePickerのfireDateというプロパティにNSDate型の値を入れてあげればよいので、UIDatapickerの値をそのまま代入してあげればよいと思います。
そうすれば、その日からrepeatIntervalで指定した日付で時間は同じ時間にプッシュ通知がくると思います。
今回はボタンを押した時に、時間を決定することにしています。

import UIKit class ViewController: UIViewController, UIPickerViewDelegate { private var myTextField: UITextField! var notification: UILocalNotification! // 変更 let myDatePicker: UIDatePicker = UIDatePicker() //変更 override func viewDidLoad() { super.viewDidLoad() let now = NSDate() println(now);// -> 2015-09-15 23:06:47 +0000 let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian) var comps:NSDateComponents = calendar!.components(NSCalendarUnit.HourCalendarUnit|NSCalendarUnit.MinuteCalendarUnit|NSCalendarUnit.SecondCalendarUnit,fromDate: now) comps.calendar = calendar; comps.hour = 15; //ここの15と30に、datepickerで取得した値を持っていきたい。 comps.hour = 30; // // notificationのfireDateとUIApplication.sharedApplication().scheduleLocalNotification(notification)をボタンのなかで実装しました let now2 = comps.date; println(now2);// -> Optional(0000-12-31 22:47:48 +0000) notification = UILocalNotification() notification.alertBody = "test" notification.timeZone = NSTimeZone.defaultTimeZone(); notification.repeatInterval = NSCalendarUnit.CalendarUnitDay self.view.backgroundColor = UIColor.whiteColor() // DatePickerを生成する. let myDatePicker: UIDatePicker = UIDatePicker() // datePickerを設定(デフォルトでは位置は画面上部)する. myDatePicker.frame = CGRectMake(0, 50, self.view.frame.width, 200) myDatePicker.timeZone = NSTimeZone.localTimeZone() myDatePicker.backgroundColor = UIColor.whiteColor() myDatePicker.layer.cornerRadius = 5.0 myDatePicker.layer.shadowOpacity = 0.5 // 値が変わった際のイベントを登録する. myDatePicker.addTarget(self, action: "onDidChangeDate:", forControlEvents: .ValueChanged) // DataPickerをViewに追加する. self.view.addSubview(myDatePicker) // UITextFieldを作成する. myTextField = UITextField(frame: CGRectMake(0,0,200,30)) myTextField.text = "" myTextField.borderStyle = UITextBorderStyle.RoundedRect myTextField.layer.position = CGPoint(x: self.view.bounds.width/2,y: self.view.bounds.height - 100); println(cnt) // UITextFieldをViewに追加する. self.view.addSubview(myTextField) } /* DatePickerが選ばれた際に呼ばれる. */ internal func onDidChangeDate(sender: UIDatePicker){ // フォーマットを生成. let myDateFormatter: NSDateFormatter = NSDateFormatter() myDateFormatter.dateFormat = "HH:mm" //"yyyy/MM/dd hh:mm" // 日付をフォーマットに則って取得. let mySelectedDate: NSString = myDateFormatter.stringFromDate(sender.date) myTextField.text = mySelectedDate as String println(mySelectedDate) var hour = mySelectedDate } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } // 今回はボタンをつけました @IBAction func selectedFireBtn() { notification.fireDate = myDatePicker.date UIApplication.sharedApplication().scheduleLocalNotification(notification) } }

実際には動かしてないので、怪しいですが、実装後うまく行ったかどうか教えていただければと思います

投稿2016/07/24 07:54

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問