2016-05-31 13 views
0

を働いていると私は、行を選択する前:のObjective-C deselectRowAtIndexPathはちょっと私のcellForRowAtIndexPathで

NSArray *tempArray = [[communityPrefs objectForKey:@"Community"] componentsSeparatedByString:@","]; 
NSMutableArray *tempArrayMutable = [[NSMutableArray alloc] initWithArray:tempArray]; 

if ([tempArrayMutable containsObject:cell.textLabel.text]) 
{ 
    [selectedAreaTable selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 

} 

この部分は素晴らしい作品。ただし、選択した項目はページの一番下にあり、ユーザーは表示されませんが、そのセルにスクロールすると選択されます。

for(NSIndexPath *index in selectedAreaTable.indexPathsForSelectedRows) 
     { 
      if(index.row != 0) 
      { 
       [selectedAreaTable deselectRowAtIndexPath:index animated:NO]; 
      } 
     } 

が、私はこのコードを実行した後、下部のセルがまだ選択されている:

今私はインクルードがそうのような選択されたすべてのセルの選択を解除するコードの一部を記述しようとしています。だから私の質問は、なぜこのセルの選択が解除されていないということですか?それはあなたがそれにスクロールするまでそこにないからですか?この問題を解決するにはどうすればよいですか?

+1

どのようにテストしていますか?それが動作しないときのインデックスパスは何ですか? 'indexPathsForSelectedRows'にはいくつのインデックスパスがありますか? – Wain

答えて

0

あなたがそれにスクロールするまではないからですか?

はい。私は、あなたが表示されている行だけのセルオブジェクトを使って "選択された"状態を変えるべきだと考えています。他のすべての行はcellForRowAtIndexPath方法で「選択」のステータスを取得する必要があり

+1

選択はテーブルビューによってトラッキングされるため、 'indexPathsForSelectedRows'はセルではなく、選択はセルによってのみ表示されます – Wain

+0

私は、あなたが_visible_行でのみハンドルの選択に 'indexPathsForSelectedRows'を使用することを意味します(私の説明が短くて悪い場合は申し訳ありません)。このメソッドでは、まだ表示されていない行(たとえば、最後の行)に対してindexPathを受け取ることはできません。だから、あなたは 'cellForRowAtIndexPath'(それは作者が最初からそれを使用するので)で動的に注意を払う必要があり、常に実際の選択状態を実行します –

0

user979331、

は、あなたではなく、あなたがそれもcellForRowAtIndexPathでも扱うことができる別々の方法で選択範囲を削除するには持っていけません。

  1. あなたはすべてのセルの選択を解除したいときは、プロパティとして

  2. を配列NSMutableArrayの* tempArrayMutableを宣言することができますが、すべての選択最後に

    -(void)clearAllSelection { [self.tempArrayMutable removeAllObjects]; self.tableView reloadData]; }

  3. 明確な名前のメソッドとさせて頂きますin cellForRowAtIndexPath as change

    if ([self.tempArrayMutable containsObject:cell.textLabel.text]) { [selectedAreaTable selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; } else{ [selectedAreaTable deselectRowAtIndexPath:indexPath animated:NO]; }

関連する問題