2016-08-21 8 views
1

私の問題は、テーブルビューに複数のセルがあることです。それらの細胞の内部には、画像があり、それがテープされている場合には緑色の境界線を得る。私がたくさんの細胞を持っていて、最初の細胞の最初の写真をタップすると、問題が起きたときです。テーブルのスクロールを少し早くすると、同じタイプの他のセルも、セル番号13などにあるにもかかわらず、緑色の境界線を持つ最初の画像が表示されます。私はそれが再利用可能な細胞だからだと思うが、どうやってテープに貼られている1つの細胞だけがその変化を保つことができるのだろうか?あなたの人は私が何を意味していたと思う、私はそれがちょっと混乱していることを知っている。ここでは、2つのカスタムセルの1つがあり、境界線を緑に変えるコードがあります。タイプbouncingRoundImagesの画像はUIImagesです。UIImageのカスタムサブクラスを作成してバウンスさせました。1つのtableviewcellの変更が他のセルに適用されました

class TwoPicsTableViewCell: UITableViewCell { 

@IBOutlet var containerView: UIView! 
@IBOutlet var firstImage: bouncingRoundImageView! 
@IBOutlet var secondImage: bouncingRoundImageView! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
    containerView.layer.cornerRadius = 10 
    containerView.clipsToBounds = true 

    setupFirstImage() 
    setupSecondImage() 
} 


func setupFirstImage() { 

    let tappedOne = UITapGestureRecognizer(target: self, action: #selector(checkPicTwo)) 
    firstImage.addGestureRecognizer(tappedOne) 
} 

func setupSecondImage() { 
    let tappedTwo = UITapGestureRecognizer(target: self, action: #selector(checkPicOne)) 
    secondImage.addGestureRecognizer(tappedTwo) 
} 

func checkPicTwo() { 

    firstImage.bouncing() 

    if secondImage.layer.borderWidth != 0 { 
     secondImage.layer.borderWidth = 0 
    } 
} 

func checkPicOne() { 

    secondImage.bouncing() 

    if firstImage.layer.borderWidth != 0 { 
     firstImage.layer.borderWidth = 0 
    } 
} 


} 
+1

'cellForRowAtIndexPath'メソッドとテーブルビューのセルを更新するテーブルビューコントローラの他のコードで質問を更新してください。 – rmaddy

答えて

3

再利用可能なセルの問題のようです。 prepareForReuseでイメージをnilに、borderWidthを0に設定してみてください。

override func prepareForReuse() 
{ 
    super.prepareForReuse() 
    firstImage.image = nil 
    secondImage.image = nil 
    firstImage.layer.borderWidth = 0 
    secondImage.layer.borderWidth = 0 
} 
+0

このように動作します:タップされていないセルには枠線がないという問題を解決しますが、元のタップされたセルにも境界線の色はありません。それを処理する良い方法はありますか? –

+0

選択されているかどうかを示すプロパティが必要です。次に、cellForRowAtIndexPathでは、このプロパティをチェックして境界線を付けることができます。 –

+0

私はそれを行う方法を理解しようとします。いくつかのサンプルコードMorten Stulenを提供できれば素晴らしいでしょう!あなたの助けをすでにありがとう –

関連する問題