2016-07-23 7 views
0

テーブルビューのボタンに少し問題があります。テーブルビューセル繰り返しのボタン

私は3つのボタンでカスタマイズしたtableViewCellを持っています。インターフェイスビルダーでボタンを非表示に設定し、テーブルがロードされるとボタンが期待どおりに隠されます。

didDelectRowが呼び出されたときにtableviewのhiddenプロパティをfalseに設定し、didDeselectRowが呼び出されたときにhidden.trueを設定しました。これは正常に動作します。問題は、didSelectRowで表示するように設定されているボタンも、7つのセルが消えるごとに表示されることです。彼らは自分自身を繰り返し続けます。以下は

は、ボタン

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) as! ContactsViewCell 

      print("Table selected") 

       cell.insertEmailButton.hidden = false 
       cell.insertPhoneButton.hidden = false 
       cell.insertAllButton.hidden = false 
       cell.contactTextLabel.alpha = 0.2 
       cell.contactDetailTextLabel.alpha = 0.2 
     } 

を示しており、これはtableViewCellが

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
     let cell = tableView.cellForRowAtIndexPath(indexPath) as! ContactsViewCell 

     cell.insertEmailButton.hidden = true 
     cell.insertPhoneButton.hidden = true 
     cell.insertAllButton.hidden = true 
     cell.contactTextLabel.alpha = 1.0 
     cell.contactDetailTextLabel.alpha = 1.0 
    } 

を選択解除されたときに、私はいくつかの研究を行なったし、私はそれがボタンで行かもしれない学んだ彼らを隠しコードです.hiddenがfalseに設定されていることが、tableviewによって再利用されています。しかし、再利用されているセルはcellForRowAtIndexPathであり、didSelectRowのセルではなく、button.hiddenをfalseに設定していることをドキュメントから理解しています。

また、cellForRowAtIndexPathのif else文でcell.isSelectedプロパティを使用して、ボタンを非表示にして表示しようとしましたが、ボタンが表示されません。テーブルがスクロールされたときに、あなたの助けを事前に

おかげ

答えて

0

は、テーブルビューには、メモリを節約するために、セルのビューを再利用します。例えば、ボタンを可視にして(didSelectRowの中で)、テーブルをスクロールすると、表ビューは上部に表示されている画面から出てきたセルを取り出し、下部に再利用して新しいセルを作成してパフォーマンスを向上させるオーバーヘッド。

これは、セルの以前のプロパティが繰り返し表示されるためです。

スクロール細胞に所望の隠しボタンを取得するには、私は新しい行が可視のビュー領域にスクロールされるたびにこれが隠しにボタンを設定します

tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

で真/偽にbutton.hidden設定することはお勧め。

これが役に立ちます。

+0

ありがとうございました。私は細胞の場合に使いました。cellForRowAtIndexPathでisSelectedを使用して、ボタンの非表示プロパティをtrueまたはfalseに設定しますが、ボタンは表示されませんでした。 –

+0

希望の結果についてもう少し詳しく教えてもらえますか? –

+0

何も複雑ではありません。私はちょうど連絡先とテーブルビューをしたいとセルがタップされると、タイトルとサブタイトルフェードと3つのボタンが表示されます。別のセルが選択されると、最初のセルはそのアルファを元に戻し、ボタンを隠し、新しく選択されたセルはボタンを表示してタイトルをフェードします。 –

0

cellForRowAtIndexPathでセルが選択解除されているかどうかをチェックするときに、それらを隠すことで繰り返しボタンを解決しました。これはまた、選択したセルが選択された状態を失うことを意味し、ビューを離れるときにボタンが消えることを意味します。 私はそれで生きることができます。

if cell.selected == false{ 
     cell.emailButton.hidden = true 
     cell.phoneButton.hidden = true 
     cell.allButton.hidden = true 
    } 
0

UITableViewは、セルを再利用してパフォーマンスを向上させます。だから、あなたが試みているやり方をすることはできません。我々がしなければならないのは、他のテーブルビューのセル情報と同様です。タイトル、説明、親指のイメージなど我々はまた、配列のボタンの状態を保存する必要があります。セルのボタンを非表示にする場合は、配列のインデックスにあるオブジェクトを取り出し、ボタンのボタン状態を変更して、そのテーブルビューセルをリロードします。それでも問題に直面したり、理解が難しいと感じたら、お気軽にお尋ねください。