Swiftについて教えてください
UICollectionviewに読み込んだ画像をタッチして枠線と番号を表示させようと下記のようにしてみたのですが、最後のセルにだけラベルの番号が表示されます。(枠を消したら数字も減ります)各セルにはラベルはきちんと配置されています。それをnumLabel.hidden = trueで消しておいて、セルをタッチした時にnumLabel.hidden = falseで表示させようとし考えています。なぜ最後のセルだけなのでしょうか。教えてください。よろしくお願いします。
import UIKit
class ViewController: UIViewController ,UICollectionViewDataSource, UICollectionViewDelegate{
//画像を格納する配列
var imageArray:[UIImage] = []
//番号ラベル
let numLabel: UILabel = UILabel(frame: CGRectMake(0,0,30,30))
//選択したIndexPath格納する配列
var selection: [NSIndexPath] = []
//コレクションビュー
@ IBOutlet weak var imageCollection:UICollectionView?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//配列imageArrayに1~6.pngの画像データを格納
for i in 1...6{
imageArray.append(UIImage(named: "\(i).png")!)
}
}
//コレクションビューのアイテム数を設定
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
//戻り値にimageArrayの要素数を設定
return imageArray.count
}
//コレクションビューのセルを設定
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
//繰り返し使用することができるUICollectionViewCellのインスタンスを作成
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! UICollectionViewCell
//セルのなかの画像を表示するImageViewのタグを指定
let imageView = cell.viewWithTag(1) as! UIImageView
//セルの中のImage Viewに配列の中の画像データを表示
imageView.image = imageArray[indexPath.row]
//ラベルの設定
// 背景を青色にする.
numLabel.backgroundColor = UIColor.blueColor()
// 文字の色を白にする.
numLabel.textColor = UIColor.whiteColor()
//文字サイズ
numLabel.font = UIFont.systemFontOfSize(12);
// Textを中央寄せにする.
numLabel.textAlignment = NSTextAlignment.Center
//ラベルを非表示にする
numLabel.hidden = true
//セルにラベルを配置
cell.addSubview(numLabel)
//設定したセルを戻り値にする
return cell
}
//セルをタップしたとき
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let cell = collectionView.cellForItemAtIndexPath(indexPath)!
if let index = find(selection, indexPath) {
selection.removeAtIndex(index)
} else {
selection.append(indexPath)
}
// 可視状態のセルを全て更新する
collectionView.visibleCells().map({(cell: AnyObject) -> Void in
self.updateCell(cell as! UICollectionViewCell)
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//セルの更新
func updateCell(cell: UICollectionViewCell) {
if let indexPath = self.imageCollection?.indexPathForCell(cell){
if let index = find(selection, indexPath) {
cell.contentView.layer.borderColor = UIColor.blueColor().CGColor
cell.contentView.layer.borderWidth = 4.0
numLabel.hidden = false
numLabel.text = "\(index+1)"
} else {
cell.contentView.layer.borderColor = UIColor.clearColor().CGColor
cell.contentView.layer.borderWidth = 0.0
numLabel.hidden = true
}
}
}
}
お礼
回答ありがとうございます。urlばかり考えていたのですが、取得しているassetを使うことで、やりたかったことが、スムーズにできました。ありがとうございました。