2016-12-06 1 views
1

同じ値である可能性のあるテーブルビューがあります。UITextfield.textと一致するように選択したtableViewCellを強調表示します。

セルを選択すると、テキストフィールドの値が選択されたセルで設定されます。

テキストフィールドと同じ値をすべて強調表示するのではなく、選択した行のみを強調表示したいとします。

現在

私のアプローチ:

dataが可能な値の配列

if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
    reuseIdentifier:@"identifierCell"]; 
} 

NSString *value = ([self.data objectAtIndex:indexPath.row]); 
NSString *selectedValue = textField.text; 

if ([value floatValue] == [selectedValue floatValue]) { 
    cell.backgroundColor = [UIColor colorWithRed:220.0/255.0 green:220.0/255.0 blue:220.0/255.0 alpha:1.0]; 
    cell.textLabel.textColor = [UIColor whiteColor]; 
} 
else { 
    cell.backgroundColor = [UIColor clearColor]; 
    cell.textLabel.textColor = [UIColor blackColor]; 
} 

サイドノートである:私はあった行に応じて、テキストフィールドのテキストを変更することができますフィールドダウンこれらのドロップのカップルを持っています選択された。行1は、他のドロップダウンリストで選択された場合(すなわち、その後、1.391は、テキストフィールドのテキストに移入されるだろう。それがものになるかどうか、関連

わからない。

どのように選択された行のみをチェックして、移入う?

enter image description here

更新以下イメージ当たりテキストフィールド:indexPathを使用する@ k06aのおかげで一歩前進である行Aが選択されている場合と、しかし問題は、現在生じ、indexPath B用はいけません変化する。私は2つの異なるindexPath変数を設定することを考えてとdidSelectRowAtにのみ、私は他のそれぞれの値

enter image description here

を変更するために呼んでいる方法のものを設定しますが、ループ内のすべてのセルを列挙することができます
+0

'UITableView'sの' allowsMultipleSelection'プロパティを使って複数のセルを選択できます。 – k06a

答えて

1

は、選択した行の選択を解除しました。 selectedValuevalueの等価に基づいています。このループは前の行の選択を解除し、新しい行を選択します。再利用可能なセルをデキューした後に初期状態を設定することを忘れないでください。 self.tableView.visibleCells

また、indexPathを記憶して前のセルの選択を解除することもできます。新しいものを選択し、そのindexPathを覚えておいてください。これが最も効果的な変種です。

選択を変更する場合は、[self.tableView reloadData]と電話することができます。これはあまり有効ではありませんが、実装が短く簡単です。

UPDATE:

ちょうど価値に基づかなく、indexPathに基づかないセル選択の異なる条件を使用しています。なぜ手動で細胞を選択する必要があるのか​​、私に思い出させてください。私は手動設定backgroundColortextColorを意味する[UITableViewCell setSelected:]の選択によって自動的にすることができます。@のk06aへ

+0

例を見せてください。私は最初の2つの方法にかなり従っていません。 – Simon

+0

私はこれらのテキストフィールドボックスの3つを持っているので、私はセルの手動設定を行います。選択されると、それぞれのテーブルビューに異なる値が設定されます。行がタップされると、すべての値がタップされた行に変わります。あなたが示した 'setSelected'メソッドを試しましたが、成功しませんでした。 – Simon

+0

'indexPath'は一歩前進していますが、私は他の要件について言及するのを忘れていました。上に更新された – Simon

1

私のソリューションのおかげdidSelectRowAtIndexPath

NSIndexPath *selectedIndexPathA; 
NSIndexPath *selectedIndexPathB; 

私はこれらの値を設定します方法にindexPathに渡す:

[self setOtherFieldsWithIndexPath:indexPath]; 

setOtherFieldsWithIndexPath方法

if (rowA) { selectedIndexPathA = indexPath; } 
else if (rowB) { selectedIndexPathB = indexPath; } 
else {...} 

そして最後にcellForRowAtIndexPath

if (selectedIndexPathA.row == indexPath.row) { 
    cell.backgroundColor = [UIColor colorWithRed:220.0/255.0 green:220.0/255.0 blue:220.0/255.0 alpha:1.0]; 
    cell.textLabel.textColor = [UIColor whiteColor]; 
} 
else if (selectedIndexPathB.row == indexPath.row) { 
    cell.backgroundColor = [UIColor colorWithRed:220.0/255.0 green:220.0/255.0 blue:220.0/255.0 alpha:1.0]; 
    cell.textLabel.textColor = [UIColor whiteColor]; 
} 
else { 
    cell.backgroundColor = [UIColor clearColor]; 
    cell.textLabel.textColor = [UIColor blackColor]; 
} 

これが最善の解決策であるかどうかはわかりませんが、現時点ではうまくいきます。

関連する問題