2017-10-19 8 views
1

私は自分のUISwitchのカスタムでTableViewCellと苦労しています。TableViewCellのスイッチを変更すると、他のセルの他のスイッチに影響するのはなぜですか?

UITableViewCellのスイッチは、セルから別のアレイに項目を追加します。しかし、スイッチを変更すると、他のセルの他のスイッチも変更されることに気付きました。

私は問題がTableView dequeueReusableCell機能と考えています。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "currencyCell") as? currencyCell else { return UITableViewCell() } 
} 
+1

これは問題が何であるかを示すのに十分なコードではありませんが、セルを返す前に 'tableView:cellForRowAt:'メソッドで 'UISwitch'の値をリセットしていないと仮定します。 – TawaNicolas

+0

質問を簡単に説明してください。 – Zee

+0

こんにちはTawaNicolas、そうです、私はそれをリセットすることができませんでした。それをどうやるか教えてくれますか?私は "cell.switchBtn(UISwitch)"経由でアクセスできます。しかし、何を入れるべきか分からない(UISwitch)部分。どうもありがとうございます! – sc13

答えて

1

あなたが特定のスイッチがそのセルにあったことを最後の値にリセットすることができるようにどこかに「外部」UITableviewCellをスイッチの値を格納する必要があります。 デリゲートパターンでセルから保存することをお勧めします(例:UISwitch'sの値が変更された場合)。次に、セルをデキューした後にtableView:cellForRowAt:関数から設定します。

+0

Hello Bence、 実際には、プロトタイプセルのデリゲートメソッドを使用してUISwitchを設定していました。しかし、私はtableViewで設定する方法を見つけることができませんでした:cellForRowAt:return cell before function。私が得るオプションは "cell.switchBtn(UISwitch)"だけです。だから私はこれをisOn == falseに設定して、新しいセルが影響を受けないようにすることができます。どうもありがとうございます! – sc13

+0

これについては、この記事を読んでくださいpls:https://makeapppie.com/2016/10/17/custom-table-view-cells-in-swift-3/ –

+0

こんにちはベンス、私は記事を読んだが、 Prototype Cellの子どもたちの価値の変化は言及していません。私はちょうど私が新しいセルを返す前に、TableView:cellForRowAt内のUISwitchの値をどのように変えることができるか知りたいだけです。あなたの時間と答えをありがとう。大変感謝しています。 – sc13

-1

私も同じ問題がありました。シニア開発者に尋ねたところ、UITableViewのセルが再利用されているため、 UITableViewの最初のUISwitchの状態をONに変更してスクロールダウンすると、最初のスイッチのセルが再利用されるため、後続のスイッチの一部はデフォルトでONとして表示されます。

最初のUISwitchをオンにしても、UITableViewの他のスイッチの状態は変更されません。代わりに、最初のスイッチが再利用されています。

したがって、これに対する解決策は、すべてのセル内のUISwitchを何らかのデータでバインドすることです。例として、(擬似):

public class ABC: UITableViewCell 
{ 
    . 
    . 
    . 
    . 
    public void UpdateCell(bool switchStatus) 
    { 
     SwitchInCell.On = switchStatus 
    } 
} 

てupdateCell方法は、UITableViewSourceクラスを継承するクラスから呼び出されます。

注:。。。私はC#の背景からだとXamarinを使用してiOS用の開発擬似コードは、C#であるが、非常に簡単スウィフトに転送することができます上記のようにする)

私はこれが助けを願っています。

関連する問題