Closed eyener3 closed 5 years ago
どこで悩まれていますか??
どこで悩まれていますか??
sabさん、ありがとうございます(>人<;) 悩んでいることは、実装全般です..😫
色々と沢山ググっていくつか参考となるサイトも見つけて、 色々とコードも書いてみたのですが、 結局、目指すゴールへはたどり着けませんでした。。
これに沿ってやっていこうと思った情報は 以下の二つです🙇🏻♀️ https://qiita.com/KokiEnomoto/items/c79c7f3793a244246fcf https://developer.apple.com/documentation/foundation/userdefaults
自分が書いているコードを見せていただければアドバイスしやすいです!
UserDefaults.standardはUserDefaults.standard.set(true, forKey: "periodUpdate")
という使い方をしても、あらかじめインスタンスを保持して使っても結果は同じです。
なので、どちらで書いても目的は達成されると思います。
UserDefaultsはKeyとValueをセットにしてアプリ毎に決められた特定の領域にデータを保存する仕組みのため、上記の記述だとperiodUpdate
というKeyに対してtrue
というValueを保存した事になります。
今回あいなーさんが実装したいのは、アクションシートでユーザーが設定を変更した場合にそれを保存する事だと思います。 そうなると、データを保存するタイミングはユーザーが設定を変更したタイミングでなければなりません。
今回のコードでアプリ側がユーザーの設定変更を検知できるのはどのタイミングでしょうか?? これに気付けると一つ前に進むと思いますよ!
今回のコードでアプリ側がユーザーの設定変更を検知できるのはどのタイミングでしょうか?? これに気付けると一つ前に進むと思いますよ!
sabさん、ありがとうございます(>人<;)!! ユーザーの設定変更を検知できるタイミングは、 Action sheetで期間を選択した時でしょうか?m(._.)m
自分が書いているコードを見せていただければアドバイスしやすいです!
kokiさん、ありがとうございますm(._.)m 全体のコードはこちらになります(>人<;)
import UIKit
final class ProgVC: UIViewController {
@IBAction private func checkClicked1(_ sender: CheckButton) {
animate(button: sender)
}
@IBAction func checkClicked2(_ sender: CheckButton) {
animate(button: sender)
}
@IBAction func checkClicked3(_ sender: CheckButton) {
animate(button: sender)
}
private func animate(button: UIButton) {
UIView.animate(withDuration: 0.1,
delay: 0.1,
options: [.curveLinear, .autoreverse],
animations: {
button.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)},
completion: { _ in
button.transform = CGAffineTransform.identity
button.isSelected.toggle()
})
}
@IBAction func didTapSeselectPeriodButton() {
// アクションシートのタイトルとメッセージ
let actionSheet = UIAlertController(title: "期間変更", message: "達成したい目標期間を選択してください", preferredStyle: .actionSheet)
// 選択肢と、選択肢ごとの処理
// handlerで指定した処理が、ボタン押下時に行われる
let period1 = UIAlertAction(title: "毎日", style: .default, handler: actionSheetChoose(sender:))
let period2 = UIAlertAction(title: "毎週", style: .default, handler: actionSheetChoose(sender:))
let period3 = UIAlertAction(title: "毎月", style: .default, handler: actionSheetChoose(sender:))
let cancel = UIAlertAction(title: "キャンセル", style: .cancel, handler: {
(action: UIAlertAction) -> Void in
print("キャンセルしました")
})
// アクションシートに、定義した選択肢を追加する
actionSheet.addAction(period1)
actionSheet.addAction(period2)
actionSheet.addAction(period3)
actionSheet.addAction(cancel)
// アクションシートを表示する
present(actionSheet, animated: true, completion: nil)
// UserDefaults のインスタンス
_ = UserDefaults.standard
UserDefaults.standard.set(true, forKey: "periodUpdate")
}
// アクションシートで選択した時の処理
private func actionSheetChoose(sender: UIAlertAction) {
print("\(sender.title!)に変更しました")
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
}
実装したはずのコードがなかったので、追記しました(>人<;)
ユーザーの設定変更を検知できるタイミングは、Action sheetで期間を選択した時でしょうか?m(._.)m
そうですね! では、Action sheetでユーザーが期間を選択した時に呼ばれるメソッド内でユーザーが選択したものを保存する必要がありそうですね。
では、Action sheetでユーザーが期間を選択した時に呼ばれるメソッド内でユーザーが選択したものを保存する必要がありそうですね。
アクションシートで選択した時の処理のメソッド内に書くのが正しいということになるのでしょうか?m(._.)m
お返事おそくなりすいません。
アクションシートで選択した時の処理のメソッド内に書くのが正しいということになるのでしょうか?
そうですね! アクションシートで選択された時に呼ばれるメソッドはどれか分かりますか?
アクションシートで選択された時に呼ばれるメソッドはどれか分かりますか?
ありがとうございます^-^!
メソッドは、actionSheetChoose
でしょうか?(>人<;)
正解です! そこで選択された値を保存すれば良さそうですね。
正解です! そこで選択された値を保存すれば良さそうですね。
よかったぁ..><!! sabさん、本当にありがとうございます(>人<;) 一つ一つ紐解きながら理解することができました☺️🙇🏻♀️
実装終わりましたm(._.)m
pushしました^-^
ありがとうございます😊
fixes #158
(#の後にcloseしたいissueの番号を記述してください)
Summary(要約)
Other Information(他の情報)
Tested(テストしたこと)
Must Reviewer(必須レビュアー)