2016-12-31 2 views
1

カスタムセルクラスの反復としてTableViewが設定されています。各セル(2つのセクションの両方)には、いくつかのラベルとボタンが含まれています。 2番目のセクションのセルの場合、ボタンテキストはプログラムによって「キャンセル」に設定され、最初のセクションのセルは異なるものに設定されます。複数のUITableViewCellは、1つだけが押されたにもかかわらず反復ボタンの影響を受けますか?

@IBAction func mainPageCancelAction(_ sender: Any) { 
     if mainPageCancelButton.title(for: .normal) == "x"{ //1st section cell 
      mainPageCancelButton.setTitle("y", for: .normal) 
     } else if mainPageCancelButton.title(for: .normal) == "y"{//1st section cell 
      mainPageCancelButton.setTitle("x", for: .normal) 
     } else if mainPageCancelButton.title(for: .normal) == "Cancel"//2nd section cell { 
      mainPageUnattendCancelButton.setTitle("Canceled", for: .normal) 
      NameLabel.alpha = 0.3 
      CreatorLabel.alpha = 0.3 
      TypeLabel.alpha = 0.3 
     } 
} 

を限り私ができるように次のように私は、ボタンがクリックされると、次のようにアルファ値を減らすことにより、ラベルのテキストをグレー表示にする(button.title「キャンセル」に等しい細胞)のボタンを設定していますこのボタンは、ボタンが「キャンセル」に設定されている2番目のセクションでは、アルファ値を下げることによってラベルをグレーアウトする必要があります。これらの第2セクションのセルのいずれかのボタンをクリックすると、そのセルのアルファ値は実際に下がりますが、最初のセクションセルのラベルの一部もランダムに(私のランダムな...)グレイ表示されますif文でif Button.title(for: .normal) == "Cancel"を満たしていないため、そのアクションの影響を受けてはなりません。タイトルはxとyです。なぜこれが起こっているのか分かりません。初歩的なifステートメントは、単純なものですが、button.titleは決して「キャンセル」できないので、最初のセクションラベルのどれもがアルファ値の変更の影響を受けないようにする必要があります。特に第2セクションのセルが正しく影響を受けるため、これがなぜ起こっているのか分かりません。ボタンが押されたセルだけがグレー表示されます。

+1

両方のセクションであなたの細胞が同じreuseidentifierを持っていますか?セクション1のリサイクルされたセルのアルファ値はセクション2で以前に設定された値を使用しているのでしょうか?各セルを作成するときにアルファ値をデフォルトにリセットしますか? – Magnas

+0

@Magnasはい、彼らは同じ再利用識別子を持っています。それらは同じセルです。セクションに応じて異なる値にラベルを設定してください。アルファ値をどのようにリセットすればよいですか? –

+0

@Magnasあなたが提案したようにするだけで、問題は解決できることが判明しました。最初のセクションのセルのアルファ値をデフォルトの1.0に設定する。 –

答えて

0

ボタンを押すとすぐに他のセルにラベルがグレー表示されますか?またはスクロールした後にのみ?

スクロールした後で起きている場合は、セルが再利用されている可能性があります。その場合、細胞の状態が賢明なものにリセットされていることを確認する必要があります。このために良い場所は、あなたのセルクラスにprepareForReuse()をオーバーライドすることである:

override func prepareForReuse() { 
    super.prepareForReuse() 

    nameLabel.alpha = 1 
    creatorLabel.alpha = 1 
    typeLabel.alpha = 1 
} 
+0

ボタンを押した直後にグレーアウトが発生する –

+0

その場合、ボタンに複数のターゲットがあるかどうかを確認します。ボタンのallTargetsプロパティを使用してください.1つしかないはずです。誤ってaddTarget(_:action::)を複数回呼び出すと、タップしたときにボタンが複数のターゲットに対してアクションを呼び出すことがあります。 – nils

関連する問題