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

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

新規登録して質問してみよう
ただいま回答率
85.50%
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回答

1767閲覧

FSCalendarで選択した日付に画像を貼りたい

wLike

総合スコア1

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クリップ

投稿2020/07/06 14:51

編集2022/01/12 10:55

前提・実現したいこと

FSCalendarでタップされた日付にのみ画像を貼りたい。

発生している問題・エラーメッセージ

func calendar(_ calendar: FSCalendar, imageFor date: Date) -> UIImage? { code } 上記のメソッドを使用すると全ての日付に画像がついてしまう。 条件分岐させると画像が表示されなくなる

該当のコード

var dateDictionary = ["1/1":false] func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) { let tmpDate = Calendar(identifier: .gregorian) let year = tmpDate.component(.year, from: date) let month = tmpDate.component(.month, from: date) let day = tmpDate.component(.day, from: date) dateString = "(year)/(month)/(day)" if dateDictionary[dateString] == false || dateDictionary[dateString] == nil{ dateDictionary[dateString] = true print(dateDictionary) }else{ dateDictionary[dateString] = false print(dateDictionary) } } func calendar(_ calendar: FSCalendar, imageFor date: Date) -> UIImage? { let image = UIImage(named:"check") if dateDictionary[dateString] == true{ return image }else{ return nil } }

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

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

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

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

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

fuzzball

2020/07/07 00:45

「条件分岐させると画像が表示されなくなる」ということは、条件分岐が間違っているということでしょう。その条件分岐のコードを書いて下さい。
wLike

2020/07/07 18:36

記入しました!よろしくお願い致します!
fuzzball

2020/07/08 00:26

実行すると、いきなり全ての日付に画像が付いているのでしょうか? didSelect以外で、dateDictionaryに値を代入しているところはありますか?
wLike

2020/07/08 09:46

タップすると全部に画像がつきます。 ないです!
guest

回答1

0

imageForの中で、日付毎にdateStringを生成してください。

投稿2020/07/08 09:55

fuzzball

総合スコア16731

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

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

wLike

2020/07/08 11:46

すみません、日付ごとにするにはどうしたらいいのか分からなくて、
fuzzball

2020/07/08 11:58

didSelect でやってることですよ。
wLike

2020/07/08 12:32

imageForのなかででもタップした日付を取得することはできるんですか? それが全く分からなくて、何度もすみません。
fuzzball

2020/07/08 12:35

引数の date がそうじゃないんでしょうか?
wLike

2020/07/08 13:21

didSelectの引数dateをimageForのdateへ代入しても同じ状態になります。
wLike

2020/07/08 13:26

func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) { dateData = date } func calendar(_ calendar: FSCalendar, imageFor date: Date) -> UIImage? { var date = date date = dateData let image = UIImage(named:"check") if dateDictionary[dateString] == true{ return image }else{ return nil } }
fuzzball

2020/07/08 14:10

imageForの引数のdateのことですよ。 「引数」って言葉が分からないですか?
wLike

2020/07/08 14:14

imageForのdateでは選択した日付を取得してくれないので
fuzzball

2020/07/09 00:25 編集

処理の流れは、 1. didSelectで、選択した日付をtrueまたはfalseにする 2. imageForで、trueになっている日付は画像を表示、falseになっている日付は画像を非表示にするです。 imageForで「選択した日付」は必要ありません。
fuzzball

2020/07/09 00:27

追記です。 上記の1の後、reloadしないとimageForは呼ばれない(カレンダーが更新されない)です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問