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

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

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

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

Swift

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

Q&A

解決済

2回答

321閲覧

iOSアプリ カレンダーに予定を登録したい

cshintaku

総合スコア34

iOS

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

Swift

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

0グッド

0クリップ

投稿2018/12/18 21:38

編集2018/12/19 05:41

イメージ説明
スケジュール管理アプリを作っております。

実現したい事は、このカレンダーに登録した予定を表示したいのです。

現状としまして

  • タップしたセルが何年の何月何日なのかを取得する方法がわからない
  • 日時からセルを特定する実装方法がイメージできない

です。
完成イメージはGoogleカレンダーのような感じです。
よろしくお願いします。

カレンダーのソースコードです。

ViewController.swift

1import UIKit 2 3class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { 4 5 let dateManager = DateManager() 6 let daysPerWeek: Int = 8 7 let cellMargin: CGFloat = 2.0 8 var selectedDate = Date() 9 var today: Date! 10 let weekArray = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] 11 12 @IBOutlet weak var headerView: UIView! 13 @IBOutlet weak var headerTitle: UILabel! 14 @IBOutlet weak var headerPrevBtn: UIButton! 15 @IBOutlet weak var headerNextBtn: UIButton! 16 @IBOutlet weak var calendarCollectionView: UICollectionView! 17 18 //MARK:- Override 19 // -------------------------------------------------------------------------------- 20 // viewDidLoad() 21 // -------------------------------------------------------------------------------- 22 override func viewDidLoad() { 23 super.viewDidLoad() 24 25 let dateFormater = DateFormatter() 26 dateFormater.locale = Locale(identifier: "ja_JP") 27 dateFormater.dateFormat = "yyyy/MM/dd" 28 let oneDay = "2018/12/16" 29 print(oneDay) 30 let castDate = dateFormater.date(from: oneDay) 31 print(castDate) 32 33 cellSizeSet() 34 headerTitle.text = changeHeaderTitle(date: selectedDate) 35 36 calendarCollectionView.delegate = self 37 calendarCollectionView.dataSource = self 38 calendarCollectionView.backgroundColor = UIColor.white 39 } 40 41 //MARK:- Method 42 // -------------------------------------------------------------------------------- 43 // changeHeaderTitle(date: Date) -> String 44 // -------------------------------------------------------------------------------- 45 func changeHeaderTitle(date: Date) -> String { 46 let formatter: DateFormatter = DateFormatter() 47 formatter.dateFormat = "yyyy年/M月" 48 let selectMonth = formatter.string(from: selectedDate) 49 return selectMonth 50 } 51 52 func cellSizeSet() { 53 let numberOfMargin: CGFloat = 8.0 54 let width: CGFloat = (calendarCollectionView.frame.width - cellMargin * numberOfMargin) / CGFloat(daysPerWeek) 55 let height: CGFloat = width * 1.0 56 let layout = UICollectionViewFlowLayout() 57 layout.itemSize = CGSize(width: width, height: height) 58 calendarCollectionView.collectionViewLayout = layout 59 } 60 61 //MARK:- Delegate 62 // -------------------------------------------------------------------------------- 63 // numberOfSections(in collectionView: UICollectionView) -> Int 64 // -------------------------------------------------------------------------------- 65 func numberOfSections(in collectionView: UICollectionView) -> Int { 66 return 2 67 } 68 69 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 70 if section == 0 { 71 return 7 72 } else { 73 return dateManager.daysAcquisition() 74 } 75 } 76 77 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 78 let cell = calendarCollectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CalendarCell 79 //テキストカラー 80 if (indexPath.row % 7 == 0) { 81 cell.textLabel.textColor = UIColor.red 82 } else if (indexPath.row % 7 == 6) { 83 cell.textLabel.textColor = UIColor.blue 84 } else { 85 cell.textLabel.textColor = UIColor.gray 86 } 87 //テキスト配置 88 if indexPath.section == 0 { 89 cell.textLabel.text = weekArray[indexPath.row] 90 } else { 91 cell.textLabel.text = dateManager.conversionDateFormat(indexPath: indexPath) 92 } 93 94 let selectedBGView = UIView(frame: cell.frame) 95 selectedBGView.backgroundColor = .blue 96 cell.selectedBackgroundView = selectedBGView 97 return cell 98 } 99 100 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 101 print(indexPath) 102 print(indexPath.row) 103 } 104 105 //MARK:- Action 106 // -------------------------------------------------------------------------------- 107 // oPrevBtn(_ sender: Any) 108 // -------------------------------------------------------------------------------- 109 @IBAction func oPrevBtn(_ sender: Any) { 110 selectedDate = dateManager.prevMonth(date: selectedDate) 111 calendarCollectionView.reloadData() 112 headerTitle.text = changeHeaderTitle(date: selectedDate) 113 } 114 115 @IBAction func oNextBtn(_ sender: Any) { 116 selectedDate = dateManager.nextMonth(date: selectedDate) 117 calendarCollectionView.reloadData() 118 headerTitle.text = changeHeaderTitle(date: selectedDate) 119 } 120} 121 122extension UIColor { 123 class func lightBlue() -> UIColor { 124 return UIColor(red: 92.0 / 255, green: 192.0 / 255, blue: 210.0 / 255, alpha: 1.0) 125 } 126 127 class func lightRed() -> UIColor { 128 return UIColor(red: 195.0 / 255, green: 123.0 / 255, blue: 175.0 / 255, alpha: 1.0) 129 } 130} 131 132

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

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

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

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

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

guest

回答2

0

ベストアンサー

・タップしたセルが何年の何月何日なのかを取得する方法がわからない
・日時からセルを特定する実装方法がイメージできない

両方とも、表示するセルのIndexと年月日の情報を紐付けしたら解決する問題です
単純に、Indexと年月日の情報の配列を用意したら良いのでは

投稿2018/12/30 11:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

cshintaku

2019/01/07 01:08

ありがとうございます。
guest

0

質問の意図がわかりませんが、
iOS標準のカレンダーから予定をひっぱりたい、という意味であれば以下が参考になると思います。

SwiftでiOS標準カレンダーを使う方法
https://qiita.com/katzhide/items/47b06736c5bfe60f25d0

投稿2018/12/19 00:28

takabosoft

総合スコア8356

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問