2016-11-22 9 views
1

現在、Xcodeでアプリケーションを開発中です。このアプリでは、複数のチェックボックスで表ビューセル(オブジェクト)の内容をフィルタリングすることができるようにしたいと考えています(図1参照)。XCODEフィルタテーブルビューマルチチェックボックス付きのセル

Picture 1

すべてのオブジェクトを表形式で示したthatsの値を有する8つの特性、又はを有しています。フィルタ領域に表示されるチェックボックスは、これらの8つのプロパティと関係しています。

評価:

var objects:[Object] = [ 
Object(name: "Lorem Ipsum", prop1: "3", prop2: "1", prop3: "1", prop4: "1", prop5: "1", prop6: "1", prop7: "3", prop8: "2"), 
Object(name: "Lorem Ipsum", prop1: "1", prop2: "1", prop3: "1", prop4: "3", prop5: "1", prop6: "1", prop7: "3", prop8: "2"), 
Object(name: "Lorem Ipsum", prop1: "1", prop2: "2", prop3: "2", prop4: "2", prop5: "2", prop6: "1", prop7: "3", prop8: "2"), 
Object(name: "Lorem Ipsum", prop1: "2", prop2: "3", prop3: "3", prop4: "1", prop5: "3", prop6: "1", prop7: "3", prop8: "2"), 
Object(name: "Lorem Ipsum", prop1: "1", prop2: "3", prop3: "1", prop4: "2", prop5: "2", prop6: "3", prop7: "2", prop8: "1"), 
Object(name: "Lorem Ipsum", prop1: "2", prop2: "3", prop3: "1", prop4: "1", prop5: "1", prop6: "1", prop7: "3", prop8: "2") 
] 

  • CheckBox1を= PROP1
  • Checkbox2 = PROP2
  • Checkbox3 = prop3
  • など。

は配列オブジェクト

すべてのチェックボックスをオフにすると、すべてのオブジェクトに同じデフォルトの色(青色)が表示されます。

しかし、チェックボックスのいずれかがチェックされている場合、フィルタは、値又はように、選択されたチェックボックスに関連するプロパティを有するオブジェクトの色を変更する必要があります。値がの場合2 =緑色に変更し、値がの場合3 =紫色に変更します。

checkbox2が選択されている場合は、またはとしてPROP2を持つすべてのオブジェクトは、別の色を持っている必要があります[写真2参照]

Picture 2 (checkbox2 selected)

私は研究をしましたが、それを行うための方法を見つけることができませんでしたし、それを機能させる。誰かが助けることができたら、それはすばらしいことでしょう!

EDIT-NOTE:ユーザーが1と2の2つのチェックボックスを選択した場合、プロパティ1または2の値が3のオブジェクトは、これらのプロパティの値が2の場合でも紫色にする必要があります。したがって、値3は2以上の重さです。

+0

チェックボックスを表示している現在のセルを単にリロードすることはできますか? 'tableView。reloadRows(at:[currentIndexPath]、with:auto) ' – Nathaniel

+0

これは可能ですが、多くの配列を正しくレンダリングする必要がありますか?ユーザーが複数のチェックボックスを選択するとどうなりますか? – Maarten

+0

質問を正しく理解していれば、各セルにオブザーバを追加しない限り、チェックボックスを選択/選択解除するたびにtableViewデータをリロードするしかないと思います。リフレッシュのためのよりスムーズなアニメーションが必要な場合は、 'tableView.reloadSections(IndexSet(integer:0)、with:auto)'を使用して、最も好きなアニメーションを選択してください。 – Nathaniel

答えて

0

多分、すべてのチェックボックスについて辞書を使用することをお勧めします。各チェックボックスに一意のtag値(0-7)を割り当てます。

let filters: [Int: Bool] = [0: false, 1: false ... 7:0]

1がfund didSelect(checkbox: UIButton){ self.tableView.reloadData() }を経由して選択されている場合、あなたはself.filters[checkbox.tag] = trueを設定することで対応するフィルタを更新します。

cellForRow(at: IndexPath)を使用してセルの色を割り当てる前に、すべてのフィルタを繰り返して、true/falseであるかどうかをチェックして、tableViewデータ項目をフィルタリングする必要があります。

+0

ありがとう、私はそれを試してみるつもりです – Maarten

関連する問題