回答:
表のセルのselectionStyle
プロパティをに設定しますUITableViewCellSelectionStyleNone
。これにより、強調表示されなくなりますtableView:didSelectRowAtIndexPath:
。また、でそのプロパティを確認することもできます。
の選択を完全に防ぐUITableViewCell
には、UITableViewDelegate
実装を用意してくださいtableView:willSelectRowAtIndexPath:
。そのメソッドからnil
、行を選択したくない場合に戻ることができます。
- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
// Determine if row is selectable based on the NSIndexPath.
if (rowIsSelectable) {
return path;
}
return nil;
}
これにより、行が選択さtableView:didSelectRowAtIndexPath:
れて呼び出されなくなります。ただし、これによって行が強調表示されるのを防ぐことはできません。
タッチ時に行が視覚的に強調表示されないようにする場合は、セルselectionStyle
がに設定されUITableViewCellSelectionStyleNone
ていることを確認できます。または、次のようにUITableViewDelegate
実装することもできtableView:shouldHighlightRowAtIndexPath:
ます。
- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
// Determine if row is selectable based on the NSIndexPath.
return rowIsSelectable;
}
didSelectRowAtIndexPath
ので、何もしないことを選択できますwillSelectRowAtIndexPath
。
これを使って:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
didSelectRowAtIndexPath
まだ呼び出されます。
iOS 6以降のみ。
tableView:shouldHighlightRowAtIndexPath:
デリゲートにメソッドを実装でき
ます。詳細はこちら:http : //developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html
この問題も、すでに述べたすべてを試しました。テーブルセルを選択する際の「青いフラッシュ」をなくした最後のトリックは、次の行を追加することでした。
self.myTableView.allowsSelection = NO;
これが1行なのか、すべてが組み合わされたのかはわかりませんが、完全な結果として、青色の選択や青色のフラッシュは得られません。ハッピー!
セットする cell.userInteractionEnabled = NO;
Appleは、didSelectRowAtIndexPathで最初に行うべきことは行の選択を解除することであると述べています
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
次に、AccessoryTypeをチェックマーク、またはなしなどに変更できます。didSelectRowAtIndexPathを入力すると、行の選択を解除できます。選択する必要がない場合は、その行をチェックしないでください。
もう1つの方法は、いくつかのカテゴリメソッドをに追加することUITableViewCell
です。私はテーブルを構築している方法のため、セバスチャン(これも良い)の答えよりもこれが好きです。他の人の役に立つかもしれないと思いました。
- (void)setSelectable:(BOOL)enabled {
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
[self setUserInteractionEnabled:enabled];
}
- (BOOL)isSelectable {
BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
[self isUserInteractionEnabled];
return ! disabled;
}
スウィフト4:
あなたは選択を防止しUITableViewDelegateを使用して強調表示することができます。shouldHighlightRowAt
:この答えは、カスタムセルは、名前の作成前提としていCustomTableViewCell
そして、あなたはカスタムセルが命名することをboolean型の内側を作成したこと:がisSelectableを
func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
if cell.isSelectable == false {
return false
} else {
return true
}
}
これは、セバスチャンセリスのobjc回答のSwiftバージョンです。
tableView:didSelectRowAtIndexPath:の代わりにtableView:willDisplayCell:forRowAtIndexPath:を使用して、セルに初めて触れたときに表示されるフラッシュを削除します。
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
特定の行を選択解除するには、UITableViewデリゲートの2つのメソッドでいくつかの変更を行う必要があります。
以下の方法で
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
セルの割り当て後、以下のコードを書きます
if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone;
上記のコードは、ユーザーが何らかの方法で選択しようとした場合、セルの強調表示を防ぎます。
以下のこのデリゲートメソッドで
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if(indexPath.row == someCellNumber) return;
//for other cells write the code below...
}
書き込みを行わないと、if(indexPath.row == someCellNumber) return;
行が選択されたままになり、アプリがクラッシュする可能性があります
tableView:shouldHighlightRowAtIndexPath:
よう下回っアユシュによって注意