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

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

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

1374閲覧

カレンダー実装にあたってのcollectionViewCellのreloadData()について

tenergy

総合スコア10

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

投稿2016/12/24 06:46

###iOSアプリでのカレンダーの実装
カレンダーの画面を基本としたアプリを作成しています.当月のカレンダーはうまく表示できているのですが,前月と次月の表示がうまくできません.実装はストーリーボードを使わずにコードで書くことを目的として,進めています.

###発生している問題・エラーメッセージ
reloadData()してもその前のcollectionViewCellの内容が残ったままになってしまっています.考えられることを教えていただきたいです.
イメージ説明
###reloadDataはこのように記述しています.

collectionView?.reloadData()

###補足情報(言語/FW/ツール等のバージョンなど)
xcode8.2で行っています.

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

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

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

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

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

guest

回答1

0

ベストアンサー

リロードする度にラベルが追加(addSubvie)されているようですね、以下の処理を加えてみてください。

★セル生成時にラベルを追加している場合

swift

1 2// ラベルをaddSubviewする前に以下を記述 3cell.contentView.subviews.forEach { 4 $0.removeFromSuperview() 5}

★カスタムセルクラスの中でラベルを追加している場合

swift

1 2// ラベルをaddSubviewする前に以下を記述 3self.contentView.subviews.forEach { 4 $0.removeFromSuperview() 5}

投稿2016/12/24 10:00

編集2016/12/24 10:01
_Kentarou

総合スコア8490

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

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

tenergy

2016/12/24 12:02 編集

回答ありがとうございます. 今テストケースを作って行っているのですが,うまくいかないので,もしご都合つきましたら,コードに目を通していただけると幸いです.よろしくお願いいたします. ''' import UIKit class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { var reloadCount:Int = 0 var myCollectionView : UICollectionView? override func viewDidLoad() { super.viewDidLoad() let reloadButton = UIBarButtonItem(title: "更新", style: .plain, target: self, action: "reload") self.navigationItem.rightBarButtonItem = reloadButton // CollectionViewのレイアウトを生成. let layout = UICollectionViewFlowLayout() // Cell一つ一つの大きさ. layout.itemSize = CGSize(width:50, height:50) // Cellのマージン. layout.sectionInset = UIEdgeInsetsMake(16, 16, 32, 16) // セクション毎のヘッダーサイズ. layout.headerReferenceSize = CGSize(width:100,height:30) // CollectionViewを生成. myCollectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout) // Cellに使われるクラスを登録. myCollectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "MyCell") myCollectionView!.delegate = self myCollectionView!.dataSource = self self.view.addSubview(myCollectionView!) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { print("Num: \(indexPath.row)") print("Value:\(collectionView)") } /* Cellの総数を返す */ func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 100 } /* Cellに値を設定する */ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell : UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell",for: indexPath as IndexPath) var textLabel : UILabel! cell.backgroundColor = UIColor.white textLabel = UILabel(frame: CGRect(x: 0, y: 0, width: cell.frame.width, height: cell.frame.height)) textLabel.font = UIFont(name: "HiraKakuProN-W3", size: 12) textLabel.textAlignment = NSTextAlignment.center textLabel.textColor = UIColor.black textLabel.text = String(self.reloadCount) cell.contentView.subviews.forEach { $0.removeFromSuperview() } cell.addSubview(textLabel) return cell } func reload(){ print("reload") self.reloadCount = self.reloadCount + 1 self.myCollectionView!.reloadData() } } '''
_Kentarou

2016/12/24 12:30

以下のコードを変更してみてください。 cell.addSubview(textLabel) ↓ cell.contentView.addSubview(textLabel)
tenergy

2016/12/24 12:36

うまくいきました.contentViewについて今一度調べてみます. 本当に助かりました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問