Swift3でリマインダーの作成ボタンが押されたときに2番目のリマインダーを設定する

Elfuthark

お客さま向けの予約リマインダーアプリを作成しましたが、予約時だけでなく、前日(24時間)までにアプリで早めに通知してほしいとの声もありましたが、よくわかりません。これを行うためにコードを編集する方法。

これは、日付ピッカーで選択した時間の予定を示す私の作業コードです。

import UIKit
import EventKit

class RemindersViewController: UIViewController {

    @IBOutlet weak var reminderText: UITextField!
    @IBOutlet weak var myDatePicker: UIDatePicker!
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
    let appDelegate = UIApplication.shared.delegate
        as! AppDelegate

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

    }

    @IBAction func setReminder(_ sender: AnyObject) {

        if reminderText.text == "" {

            // Create the alert controller
            let alertController = UIAlertController(title: "Information Needed", message: "Please type in your treatment and select the correct date and time you wish to be reminded about before pressing the Create Appointment Reminder button.", preferredStyle: .alert)

            // Create the actions
            let okAction = UIAlertAction(title: "Got It", style: UIAlertActionStyle.default) {
                UIAlertAction in
                NSLog("OK Pressed")
            }

            // Add the actions
            alertController.addAction(okAction)

            // Present the controller
            self.present(alertController, animated: true, completion: nil)

        } else {

            activityIndicator.startAnimating()

            let eventStore = EKEventStore()
            eventStore.requestAccess(
                to: EKEntityType.reminder, completion: {(granted, error) in
                    if !granted {
                        print("Access to store not granted")
                        print(error!.localizedDescription)
                    } else {
                        print("Access granted")
                        self.createReminder(in: eventStore)
                    }
            })
        }

        self.reminderText.resignFirstResponder()
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {

        textField.resignFirstResponder()

        return true
    }

    func createReminder(in eventStore: EKEventStore) {

        let reminder = EKReminder(eventStore: eventStore)

        reminder.title = reminderText.text! + " " + "(Pose Beauty Salon)"
        reminder.calendar =
            eventStore.defaultCalendarForNewReminders()
        let date = myDatePicker.date
        let alarm = EKAlarm(absoluteDate: date)

        reminder.addAlarm(alarm)

        do {
            try eventStore.save(reminder,
                                             commit: true)
        } catch let error  {
            print("Reminder failed with error \(error.localizedDescription)")
        }

        // Create the alert controller
        let alertController = UIAlertController(title: "Reminder Created Successfully", message: "Your \(reminderText.text!) appointment reminder at Pose Beauty Salon has been successfully created in your iPhone Reminders app.  Thank You!", preferredStyle: .alert)

        // Create the actions
        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) {
            UIAlertAction in
            NSLog("OK Pressed")
            self.reminderText.text = ""
            self.activityIndicator.stopAnimating() 
        }

        // Add the actions
        alertController.addAction(okAction)

        // Present the controller
        self.present(alertController, animated: true, completion: nil)
    }

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

コードを次のように変更しましたが、リマインダーは1回しか保存されません。

func createReminder(in eventStore: EKEventStore) {

    let reminder = EKReminder(eventStore: eventStore)
    let secondReminder = EKReminder(eventStore: eventStore)

    reminder.title = reminderText.text! + " " + "(Pose Beauty Salon)"
    reminder.calendar =
        eventStore.defaultCalendarForNewReminders()
    secondReminder.title = reminderText.text! + " Tomorrow " + "(Pose Beauty Salon)"
    secondReminder.calendar =
        eventStore.defaultCalendarForNewReminders()
   // let date = myDatePicker.date
    let actualDate = myDatePicker.date
    let earlyReminderDate = actualDate.addingTimeInterval(-3600*24)
    //let alarm = EKAlarm(absoluteDate: date)
    let alarm = EKAlarm(absoluteDate: actualDate)
    let secondAlarm = EKAlarm(absoluteDate: earlyReminderDate)

    reminder.addAlarm(alarm)
    secondReminder.addAlarm(secondAlarm)
darrenallen7

eventStore.defaultCalendarForNewReminders()複数のアラームを許可しいないようです。

代わりにリマインダーをカレンダーアプリに保存すると、この動作を実現できます。

これを行うためにコードにいくつかの変更を加えました。これが役立つことを願っています。アクセスリクエストを更新しました

let eventStore = EKEventStore()
        eventStore.requestAccess(
            to: EKEntityType.event, completion: {(granted, error) in
                if !granted {
                    print("Access to store not granted")
                    print(error!.localizedDescription)
                } else {
                    print("Access granted")
                    self.createReminder(in: eventStore)
                }
        })

EKReminderの代わりにEKEventを作成し、EKEventEditViewControllerを開きます

func createReminder(in eventStore: EKEventStore) {

    let reminder = EKEvent(eventStore: eventStore)

    reminder.title = reminderText.text! + " " + "(Pose Beauty Salon)"
    reminder.calendar =
        eventStore.defaultCalendarForNewEvents
    let date = myDatePicker.date
    let alarm = EKAlarm(absoluteDate: date)
    reminder.addAlarm(alarm)

    let earlierDate = date.addingTimeInterval(-3600*24)
    let earlierAlarm = EKAlarm(absoluteDate: earlierDate)
    reminder.addAlarm(earlierAlarm)

    reminder.startDate = date
    reminder.endDate = date.addingTimeInterval(3600)

    do {
        try eventStore.save(reminder, span: .thisEvent, commit: true)
    } catch let error  {
        print("Reminder failed with error \(error.localizedDescription)")
        return
    }


    // Create the alert controller
    let alertController = UIAlertController(title: "Reminder Created Successfully", message: "Your \(reminderText.text!) appointment reminder at Pose Beauty Salon has been successfully created in your iPhone Reminders app.  Thank You!", preferredStyle: .alert)

    // Create the actions
    let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) {
        UIAlertAction in
        NSLog("OK Pressed")
        self.reminderText.text = ""
        self.activityIndicator.stopAnimating()
    }

    // Add the actions
    alertController.addAction(okAction)

    // Present the controller
    self.present(alertController, animated: true, completion: nil)


}

からデリゲートメソッドを追加しました EKEventEditViewDelegate

func eventEditViewController(_ controller: EKEventEditViewController, didCompleteWith action: EKEventEditViewAction) {

    switch action
    {
    case .saved:
        let alertController = UIAlertController(title: "Reminder Created Successfully", message: "Your \(reminderText.text!) appointment reminder at Pose Beauty Salon has been successfully created in your iPhone Reminders app.  Thank You!", preferredStyle: .alert)

        // Create the actions
        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) {
            UIAlertAction in
            NSLog("OK Pressed")
            self.reminderText.text = ""
            self.activityIndicator.stopAnimating()
        }

        // Add the actions
        alertController.addAction(okAction)

        // Present the controller
        self.present(alertController, animated: true, completion: nil)

    default:
        self.dismiss(animated: true, completion: nil)
    }

}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ボタンがクリックされたときにGUIを更新するためにqtクリエーターのmain.cppにタイマーを設定するにはどうすればよいですか?

分類Dev

ボタンがクリックされたときにタイマーを設定するにはどうすればよいですか?

分類Dev

モデルからYii2GridViewで1番目のリマインダーと2番目のリマインダーを印刷するにはどうすればよいですか?

分類Dev

JavaScriptを使用してブラウザーの戻るボタンが押されたときにURLにリダイレクトする

分類Dev

ダイアログでボタンが押されたときにTextFieldが機能しないことに焦点を当てる-マテリアルUI

分類Dev

Androidのリストの3つおきのアイテムにリマインダーを設定するにはどうすればよいですか?

分類Dev

RecyclerView内のボタンが押されたときにファイルをダウンロードするにはどうすればよいですか?

分類Dev

ダーツポリマーコンポーネントでチェックインされたラジオボタンを設定する方法

分類Dev

2番目のタブで戻るボタンが押されたときのreact-navigationの奇妙な動作。(リアクトネイティブ)

分類Dev

キーが押されたときにマウスの位置にHtmlElementのスタイルを設定する方法

分類Dev

フラッター:選択した最初のドロップダウンボタンの値に基づいて、2番目のドロップダウンボタン(マルチレベルの依存ボタン)の値を設定するにはどうすればよいですか?

分類Dev

Swiftでボタンが押されたときにスライダーを表示するにはどうすればよいですか?

分類Dev

デバイスの戻るボタンが押されたときにデータをクリアするにはどうすればよいですか?

分類Dev

プレビューボタンが既にクリックされた後、Reactアプリに2番目と3番目のボタンを表示するにはどうすればよいですか?

分類Dev

スライダーの値が変更されたときにトリガーされるイベントですが、マウスボタンはまだ離されていません

分類Dev

バックボーンアプリで入力フィールドイベントがトリガーされたときに、最初のビューが2番目のビューから望ましくない形でレンダリングされますか?

分類Dev

送信者がリマインダーを設定していない場合、アポイントメントのリマインダー時間を上書きするにはどうすればよいですか?

分類Dev

Slackリマインダーにリンクを設定する

分類Dev

マウスボタンが押されたときにキーボードキーを押すためのスクリプト

分類Dev

3番目の列の値によって定義されたシリーズで2つの列をプロットするパンダ

分類Dev

予定としてカレンダーに表示されないリマインダーを設定するにはどうすればよいですか?

分類Dev

デフォルトで2番目のアイテムを開き、アイコンの色を設定するようにマテリアルステッパーを設定するにはどうすればよいですか?(AngularMaterial)

分類Dev

動的に追加すると、2番目のGoogleマップが正しくレンダリングされない

分類Dev

1つのポインターで「削除」を使用すると、2番目のポインターが削除されます(バイナリ検索ツリー)

分類Dev

パンダプロットインターフェイスを介して2番目のy軸でパンダデータフレームをプロットするときに凡例の位置を設定します

分類Dev

Firebaseでデータベースを使用しているときにボタンを押すと、原因不明の「リダイレクト」が発生します

分類Dev

RecyclerViewは、押されたアイコンボタンだけでなく、10番目ごとのアイコンボタンのステータスを設定します

分類Dev

Haporxy:サーバー1がダウンしている場合、接続を2番目のサーバーにリダイレクトします。サーバー2がダウンすると、3番目のサーバーに移動します。

分類Dev

モーダルダイアログは、ボタンを押すだけで表示されるようにするためにタイマーを設定する方法

Related 関連記事

  1. 1

    ボタンがクリックされたときにGUIを更新するためにqtクリエーターのmain.cppにタイマーを設定するにはどうすればよいですか?

  2. 2

    ボタンがクリックされたときにタイマーを設定するにはどうすればよいですか?

  3. 3

    モデルからYii2GridViewで1番目のリマインダーと2番目のリマインダーを印刷するにはどうすればよいですか?

  4. 4

    JavaScriptを使用してブラウザーの戻るボタンが押されたときにURLにリダイレクトする

  5. 5

    ダイアログでボタンが押されたときにTextFieldが機能しないことに焦点を当てる-マテリアルUI

  6. 6

    Androidのリストの3つおきのアイテムにリマインダーを設定するにはどうすればよいですか?

  7. 7

    RecyclerView内のボタンが押されたときにファイルをダウンロードするにはどうすればよいですか?

  8. 8

    ダーツポリマーコンポーネントでチェックインされたラジオボタンを設定する方法

  9. 9

    2番目のタブで戻るボタンが押されたときのreact-navigationの奇妙な動作。(リアクトネイティブ)

  10. 10

    キーが押されたときにマウスの位置にHtmlElementのスタイルを設定する方法

  11. 11

    フラッター:選択した最初のドロップダウンボタンの値に基づいて、2番目のドロップダウンボタン(マルチレベルの依存ボタン)の値を設定するにはどうすればよいですか?

  12. 12

    Swiftでボタンが押されたときにスライダーを表示するにはどうすればよいですか?

  13. 13

    デバイスの戻るボタンが押されたときにデータをクリアするにはどうすればよいですか?

  14. 14

    プレビューボタンが既にクリックされた後、Reactアプリに2番目と3番目のボタンを表示するにはどうすればよいですか?

  15. 15

    スライダーの値が変更されたときにトリガーされるイベントですが、マウスボタンはまだ離されていません

  16. 16

    バックボーンアプリで入力フィールドイベントがトリガーされたときに、最初のビューが2番目のビューから望ましくない形でレンダリングされますか?

  17. 17

    送信者がリマインダーを設定していない場合、アポイントメントのリマインダー時間を上書きするにはどうすればよいですか?

  18. 18

    Slackリマインダーにリンクを設定する

  19. 19

    マウスボタンが押されたときにキーボードキーを押すためのスクリプト

  20. 20

    3番目の列の値によって定義されたシリーズで2つの列をプロットするパンダ

  21. 21

    予定としてカレンダーに表示されないリマインダーを設定するにはどうすればよいですか?

  22. 22

    デフォルトで2番目のアイテムを開き、アイコンの色を設定するようにマテリアルステッパーを設定するにはどうすればよいですか?(AngularMaterial)

  23. 23

    動的に追加すると、2番目のGoogleマップが正しくレンダリングされない

  24. 24

    1つのポインターで「削除」を使用すると、2番目のポインターが削除されます(バイナリ検索ツリー)

  25. 25

    パンダプロットインターフェイスを介して2番目のy軸でパンダデータフレームをプロットするときに凡例の位置を設定します

  26. 26

    Firebaseでデータベースを使用しているときにボタンを押すと、原因不明の「リダイレクト」が発生します

  27. 27

    RecyclerViewは、押されたアイコンボタンだけでなく、10番目ごとのアイコンボタンのステータスを設定します

  28. 28

    Haporxy:サーバー1がダウンしている場合、接続を2番目のサーバーにリダイレクトします。サーバー2がダウンすると、3番目のサーバーに移動します。

  29. 29

    モーダルダイアログは、ボタンを押すだけで表示されるようにするためにタイマーを設定する方法

ホットタグ

アーカイブ