2016-12-19 12 views
0

少し助けが必要です。サーバーから受信した配列を持っているテーブルビューで作業しています。配列は、複数選択オプションです。それはこのように見えますすぐに最後のオプションをタップ(選択)したときに選択したオプションの選択を解除する

a。表

b。ボトル

c。ハット

d。バケット

e。上記のどれでもない。

私は何をしたいですか? 複数の回答、つまりテーブル、ボトル、バケットを選択し、チェックボックスをオンにして表示します。私はそれをうまくやっています。最後のオプション、すなわち上記のいずれも選択されていない場合は、上記のすべてのチェックマークオプションの選択を解除し、[なし]オプションをオンにして、これが機能していても表示します。

ここで私は立ち往生していますか? "None of the Above"が選択されたモードで他のオプションをタップすると、 "None"を選択解除する必要があります。これは動作していない、私はここで何が間違っているか分からない。助けてください。 TIA

は、ここに私のdidSelect方法

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
{ 
     if selectedString == "None of the above" { 

      selectedIndex = indexPath.row 

      self.isNoneSelected = true 

      for index in tableView.indexPathsForSelectedRows! 

     { 
      tableView.deselectRowAtIndexPath(index, animated: true) 
     } 

} 

だと、私なしオプションは常に最後の位置になりますので、さえarray.lastobject、私は必ず、それができない

+0

良いアイデアではありません。 –

+0

確かに、質問を更新します@MauryMarkowitz – iDeveloper

+0

あなたのコードを更新してください。できるだけこれまでに試したことはありますか? –

答えて

0

あなたがここにそれはあまりにも複雑作っています。 UIImageViewを追加して選択状態を表す場合は、選択した状態を格納するブール値の配列と、reloadData()がtableViewに必要です。 それは私たちは、あなたが「上記のどれも」をタップしないときに起動コードを参照する必要が直接行ごと)(tableView.deselectRowを呼び出すために

var selected = Array(repeating: false, count: 5) 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) { 
//let cell = whatever 
    cell.checkMark.isHidden = !selected[indexPath.row] 
//return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
{ 
    selected[indexPath.row] = !selected[indexPath.row] 

    if (indexPath.row == selected.count - 1) {//if 'None' is selected 
     for i in 0..<selected.count-2 { 
      selected[i] = false 
     } 
    } else { //all other rows will deselect the 'None' row 
     selected[selected.count - 1 ] = false 
    } 
    tableView.reloadData() 
} 
0

[OK]を推測動作しますこのコードはすべての選択イベントを処理するようですね。その場合、いくつかの問題があるようです。

1)selectedIndexは、最後の項目を選択した場合にのみ設定されます。私はそれがあなたが望むものではないと思うが、私は確信が持てない。

2)self.isNoneSelected = trueと同じです - 他の方法でこの値を使用して、選択した項目であるかどうかを確認したいと思いますが、もう一度オフにするコードはありません。

3)他のすべての項目の選択をオフにしますが、「なし」の選択をオンにしません - イベントで既に発生している可能性がありますが、残りのコードは表示されません。

だから私はあなたがこのような何かをしたいと思う:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    selectedIndex = indexPath.row 
    if selectedString == "None of the above" { 
     self.isNoneSelected = true 
     for index in tableView.indexPathsForSelectedRows! 
     { 
      tableView.deselectRowAtIndexPath(index, animated: true) 
     } 
    } else { 
     self.isNoneSelected = false 
//NOTE I AM NOT AT MY MACHINE SO I DON'T KNOW THE EXACT SYNTAX HERE 
//THE IDEA IS TO GET THE INDEX PATH OF THE LAST ITEM SO WE CAN TURN IT OFF 
     tableView.deselectRowAtIndexPath(NSIndexPath.indexPathForRow(mydatasource.count-1, inSection:0), animated: true) 
    } 
} 
関連する問題