2016-08-01 13 views
-1

これは私のUIViewのサブビューであるUICollectionView有する単一のビューコントローラがXcodeの7.3.1、迅速2スイフト2、UICollectionViewが正しい識別子で正しくデキューしない

あります。コレクションビューには、識別子「NumberCell」を持つセルがあります。ここで

が私のViewController

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("NumberCell", forIndexPath: indexPath) as? NumberCell { 
     let currentNumber = indexPath.row + 1 
     cell.configureCell(currentNumber) 

     cell.numberBtn.tag = currentNumber; 
     cell.numberBtn.addTarget(self, action: #selector(ViewController.playerClickedButton(_:)), forControlEvents: UIControlEvents.TouchUpInside) 

     return cell 
    } else { 
     return UICollectionViewCell() 
    } 
} 

の私cellForItemAtIndexPathですここで私は視覚的な問題ではなく、クラッシュを経験してい

func configureCell(cellNumber: Int) { 
    backNumberLbl.text = "\(cellNumber)" 
    frontNumberLbl.text = "\(cellNumber)" 
    self.tag = cellNumber 
    numberBtn.tag = cellNumber 
} 

(それは問題べきでないことを)私のセルの "configureCell" です。私がスクロールすると、新しいセルは画面からスクロールしたセルの特性を示しています。まだ壊れている識別子を変更しました。そして、私はそれを元に戻しました、まだ壊れました。私はcell.configureCell(currentNumber)の下にある他のコード行をコメントアウトしました。

私はすべてを調べており、これを把握することはできません。

ありがとうございましたStackOverflowコミュニティ!

+0

'func registerClass(_:、forCellWithReuseIdentifier:)'を使って 'NumberCell'を' 'NumberCell" 'として登録しましたか? –

+0

私はStoryBoardを、識別子が正確に "NumberCell"であるカスタムセルで使用しています – SZLSoft

+0

以前のセルから表示されているセルは何ですか? – Abizern

答えて

0

私の評判のためにコメントを追加することはできません。しかし、私は前にこのような問題に直面しました。

  1. あなたは、コードを使用している場合は、viewDidLoad方法public func registerClass(cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String)呼び出された場合は、確認してください。

  2. Nibを使用する場合、メソッドregisterNib(nib: UINib?, forCellWithReuseIdentifier identifier: String)を呼び出したかどうかを確認してください。

  3. ストーリーボードを使用する場合は、メソッドpublic func registerClass(cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String)またはregisterNibを呼び出しないでください。

詳細については、壊れている場合(I've changed the identifier, still broken)、コンソールログを投稿する方が良いでしょう。

更新: あなたcode.Hereに基づいて予想通り、私は結果を得るには私のコードです:

class ViewController: UIViewController { 

    @IBOutlet weak var collectView: UICollectionView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

} 

extension ViewController : UICollectionViewDelegate, UICollectionViewDataSource { 

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return 50 
    } 

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("NumberCell", forIndexPath: indexPath) as? NumberCell { 
      let currentNumber = indexPath.row + 1 
      cell.configureCell(currentNumber) 
      cell.numberBtn.tag = currentNumber; 
      cell.numberBtn.addTarget(self, action: #selector(ViewController.playerClickedButton(_:)), forControlEvents: UIControlEvents.TouchUpInside) 

      return cell 
     } else { 
      return UICollectionViewCell() 
     } 
    } 

    func playerClickedButton(button: UIButton) { 
     print(button.tag) 
    } 

} 

class NumberCell: UICollectionViewCell { 

    @IBOutlet weak var backNumberLbl: UILabel! 

    @IBOutlet weak var frontNumberLbl: UILabel! 

    @IBOutlet weak var numberBtn: UIButton! 

    func configureCell(cellNumber: Int) { 
     backNumberLbl.text = "\(cellNumber)" 
     frontNumberLbl.text = "\(cellNumber)" 
     self.tag = cellNumber 
     numberBtn.tag = cellNumber 
    } 
} 

enter image description here

+0

私はストーリーボードを使用しています。上記のスニペットでわかるように、私はその機能を含んでいません。申し訳ありませんが、私はより明確にすべきでした。 "壊れた"、それはクラッシュを意味しません。私はそれが適切にデキューしていないことを意味し、コレクションビューをスクロールするときに表示されるセルで古いセルの視覚化を取得しています。 – SZLSoft

+0

@SZLSoft回答を更新します。それはスクロールするとき私のためにうまく動作します。 – Catoshi

+0

スクロールが正常に動作します。問題は、ユーザーがセルをタップすると色が変わることです。次に、それらがスクロールするとき、新しいセルは、タップされたセルの色を示すことがあります。 #3をタップすると想像してみてください。それからあなたはスクロールし、#40はタップカラーを持つかもしれません。スクロールバックすると、#3が元の状態に戻ることがあります。別のquestion.Youある – SZLSoft

-1

currentNumber = indexPath.row + 1

cell.configureCellてみましょう(currentNumber)

ここでは現在のindexPathのセルをデキューしていますが、次のセルwhを設定しようとしていますichはまだデキューされていません。

+1

実際、私はセルをデキューして設定しています。 「currentNumber」は、視覚目的のためにテキストフィールドを操作する際に使用される単なる整数です。デキューすることとは関係ありません。私は+ 1を取り除こうとしましたが、視覚上の問題はまだ起こります – SZLSoft

関連する問題