1241

の行をタップするとUITableView、その行が強調表示されて選択されます。これを無効にして、行をタップしても何も起こらないようにすることはできますか?

4

42 に答える 42

2004

UITableViewCell次のいずれかを使用して、インスタンスで選択スタイルを設定するだけです。

目的 C:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

また

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

スウィフト 2:

cell.selectionStyle = UITableViewCellSelectionStyle.None

スウィフト 3 および 4.x:

cell.selectionStyle = .none

さらに、テーブル ビュー デリゲートに実装しないか、実装-tableView:didSelectRowAtIndexPath:する場合はアクションを実行しないセルを明示的に除外するようにしてください。

詳細はこちらこちら

于 2008-10-10T13:22:04.480 に答える
644

私にとって、以下はうまくいきました:

tableView.allowsSelection = false

これはdidSelectRowAt#単に機能しないことを意味します。つまり、テーブルの行に触れても、まったく何も起こりません。(したがって、明らかに、選択されたアニメーションは存在しません。)

(セル上に、UIButtonまたは他のコントロールがある場合、もちろんそれらのコントロールは引き続き機能します。テーブルセル上にあるコントロールは、「行を選択」できるUITableViewの機能とはまったく関係ありません。を使用してdidSelectRowAt#。)

UITableView注意すべきもう1つのポイントは、編集モードの場合は機能しません。編集モードでセルの選択を制限するには、次のコードを使用します。

tableView.allowsSelectionDuringEditing = false 
于 2009-07-22T16:56:19.283 に答える
360

最近この投稿を読んで役に立ったので、すべての回答を統合するために別の回答を投稿したいと思いました(後世のために)。



したがって、目的のロジックや結果に応じて、実際には 5 つの異なる答えがあります。

1.セルの他の相互作用を変更せずに青色の強調表示を無効にするには:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

UITableViewCell でホストされている UIButton (またはその他のコントロール) があり、ユーザーがセル自体ではなくコントロールと対話できるようにしたい場合に、これを使用します。

: Tony Million が上で述べたように、これは防止しませんtableView:didSelectRowAtIndexPath:。私はこれを単純な「if」ステートメントで回避します。ほとんどの場合、セクションをテストし、特定のセクションのアクションを回避します。

このようなセルのタップをテストするために私が考えた別の方法は次のとおりです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // A case was selected, so push into the CaseDetailViewController
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (cell.selectionStyle != UITableViewCellSelectionStyleNone) {
        // Handle tap code here
    }
}



2.テーブル全体に対してこれを行うには、上記のソリューションをテーブル内の各セルに適用できますが、これを行うこともできます。

[tableView setAllowsSelection:NO];

私のテストでは、これでも内部のコントロールをUITableViewCellインタラクティブにすることができます。


3.セルを「読み取り専用」にするには、次のようにします。

[cell setUserInteractionEnabled:NO];



4.テーブル全体を「読み取り専用」にするには

[tableView setUserInteractionEnabled:NO];



5.セルを強調表示するかどうかをオンザフライで決定するには(この回答によれば、暗黙的に選択が含まれます)、次のUITableViewDelegateプロトコルメソッドを実装できます。

- (BOOL)tableView:(UITableView *)tableView 
   shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
于 2011-06-10T11:08:35.577 に答える
88

これを実装した私自身の経験に基づいて、正しい答えであると私が信じていることを要約すると、

一部のセルのみの選択を無効にする場合は、次を使用します。

cell.userInteractionEnabled = NO;

これにより、選択が妨げられるだけでなく、それが設定されているセルに対して tableView:didSelectRowAtIndexPath: が呼び出されるのも停止します。(この回答についてトニーミリオンに謝意を表します、ありがとう!)

セルにクリックする必要があるボタンがある場合は、代わりに次のことを行う必要があります。

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

のセルをクリックしても無視する必要があります- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

テーブル全体の選択を無効にする場合は、次を使用します。

tableView.allowsSelection = NO;

(パウロ・デ・バロスの功績、ありがとう!)

于 2011-06-01T13:32:49.070 に答える
58

iOS 6.0 の時点でUITableViewDelegatetableView:shouldHighlightRowAtIndexPath:. (これについては、iOSドキュメントを参照してください。)

userInteractionEnabled = NOこのメソッドを使用すると、セルの選択スタイルを変更したり、セルのイベント処理をいじったり、ここに記載されているその他の手法を使用したりすることなく、特定の行を強調表示不可 (暗黙的に選択不可) としてマークできます。

于 2012-10-31T21:48:47.593 に答える
51

下の画像に示すように、インスペクター ペインNoSelectionのオプション (UITableView プロパティ) から選択することで、インターフェイス ビルダー自体からの行の選択を無効にすることもできます。selection

UITableView インスペクター

于 2013-04-25T13:13:28.617 に答える
47

SWIFT 3 の固定ソリューション

cell.selectionStyle = .none
于 2017-01-07T19:15:36.313 に答える
37

UITableViewCell属性インスペクターのXIBで、値をSelectionに設定しますNone

ここに画像の説明を入力

于 2016-10-05T07:49:18.870 に答える
36

Swiftの回答が必要な場合:

cell.selectionStyle = .None
于 2014-12-02T09:39:43.130 に答える
35

選択した状態を維持せずに選択を点滅させたい場合は、次のように呼び出すことができます。

didSelectRowAtIndexPath

以下

[tableView deselectRowAtIndexPath:indexPath animated:YES];

そのため、選択した状態が点滅して元に戻ります。

于 2012-11-13T15:07:34.103 に答える
30

これは、cellForRowAtIndexPathこのコードを書く際に使用するものです。

cell.selectionStyle = UITableViewCellSelectionStyleNone;
于 2015-03-30T10:31:58.313 に答える
29

UITableViewDelegateプロトコルから、行を選択したくない場合はメソッドwillSelectRowAtIndexPath を使用できます。return nil

同じように、このwillDeselectRowAtIndexPathメソッドを使用できますreturn nil。行の選択を解除したくない場合。

于 2009-06-30T10:01:20.427 に答える
27

1- 次のいずれかを使用して、インスタンスに選択スタイルを設定するだけです。UITableViewCell


目的 C:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

また

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];


スウィフト 2:

cell.selectionStyle = UITableViewCellSelectionStyle.None


スウィフト 3:

cell.selectionStyle = .none


2 - 実装しない -tableView:didSelectRowAtIndexPath:テーブル ビューでdelegate、または実装する場合はアクションを実行しないセルを明示的に除外します。

3 - さらに、絵コンテからもできます。テーブル ビュー セルをクリックし、[テーブル ビュー セル] の下の属性インスペクターで、[選択] の横にあるドロップダウンを [なし] に変更します。


4 - (iOS) Xcode 9、Swift 4.0 で以下のコードを使用して、表のセルの強調表示を無効にすることができます。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCell(withIdentifier: "OpenTbCell") as! OpenTbCell
        cell.selectionStyle = .none
        return cell


}
于 2015-03-30T06:10:18.293 に答える
20

目的 C:

  1. 以下のスニペットはハイライトを無効にしますが、への呼び出しも無効にしますdidSelectRowAtIndexPath。したがって、実装していない場合はdidSelectRowAtIndexPath、以下の方法を使用してください。これは、テーブルを作成するときに追加する必要があります。ただし、これはボタンとUITextFieldセル内で機能します。

    self.tableView.allowsSelection = NO;
    
  2. 以下のスニペットでは強調表示が無効になっていますが、への呼び出しは無効になりませんdidSelectRowAtIndexPath。セルの選択スタイルをなしに設定しますcellForRowAtIndexPath

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
  3. 以下のスニペットは、セルのすべてを無効にします。buttonsこれにより、との対話が無効になりtextfieldsます:

    self.tableView.userInteractionEnabled = false;
    

迅速:

以下は、上記のソリューションSwiftと同等です。Objective-C

  1. 最初のソリューションの交換

    self.tableView.allowsSelection = false
    
  2. 2 番目のソリューションの交換

    cell?.selectionStyle = UITableViewCellSelectionStyle.None
    
  3. 3 番目のソリューションの交換

    self.tableView.userInteractionEnabled = false
    
于 2014-11-22T09:43:36.450 に答える
19

次のように入力してみてください。

cell.selected = NO;

必要に応じて行の選択を解除します。

Swift3では..。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let r = indexPath.row
    print("clicked .. \(r)")
    tableView.cellForRow(at: indexPath)?.setSelected(false, animated: true)
}
于 2011-05-27T15:37:39.243 に答える
14

私もこれとかなり苦労しており、財産UITableViewCellの使用を禁止していuserInteractionEnabledます。設定用に 3 つのセル静的テーブルがあり、2 つには日付があり、1 つにはオン/オフ スイッチがあります。Storyboard/IB で遊んだ後、一番下の行を選択できないようにしましたが、タップすると一番上の行の選択が消えます。これが私の設定 UITableView の WIP イメージです。

設定 UITableView

3 番目の行をタップしても何も起こらず、選択は 2 番目の行にとどまります。この機能は、事実上、Apple のカレンダー アプリの追加イベント時間選択画面のコピーです。

コードは驚くほど互換性があり、IOS2 に至るまで =/:

- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 2) {
        return nil;
    }
    return indexPath;
}

これは、選択スタイルをなしに設定することと連動して機能するため、タッチ ダウン イベントでセルがちらつきません。

于 2013-01-03T21:08:48.237 に答える
12

スウィフト 3、4、および 5

より良い練習、コードを書くUITableViewCell

たとえば、あなたはUITableViewCell名前を持っていますMyCellawakeFromNibただ書くだけでself.selectionStyle = .none

完全な例:

class MyCell: UITableViewCell {
    
    override func awakeFromNib() {
        super.awakeFromNib()
        self.selectionStyle = .none
    }
    
}
于 2020-08-10T07:44:29.617 に答える
11

次のようなコードを書くことができます

 cell.selectionStyle = UITableViewCellSelectionStyleNone;

ただし、カスタムセル xibが行の上にある場合、その時点で警告が表示されます

カスタム セル xib

インターフェイスビルダーから選択スタイル Noneを設定する必要があります

于 2012-03-24T13:21:09.660 に答える
10

これを試して

cell.selectionStyle = UITableViewCellSelectionStyleNone;

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

また、interfacebuilder を使用して選択スタイルを設定することもできます。

于 2012-07-09T07:27:18.230 に答える
7

これは、選択中に行が強調表示されないようにするための最良かつ最も簡単な解決策ですが、

cell.selectionStyle = UITableViewCellSelectionStyleNone;

また、行が選択されていることを簡単に示してからオフにすると便利な場合があることもお勧めします。これにより、ユーザーが何を選択しようとしたかを確認するアラートがユーザーに表示されます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     [tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}
于 2013-08-20T21:25:24.857 に答える
6

UITableViewCellSelectionStyleNoneを使用したくない場合や使用できない場合は、背景色を Clear に設定して と同じ効果を実現することもできますUITableViewCellSelectionStyleNone

次のようなコードを使用します。

UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = [UIColor clearColor];
backgroundColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView: backgroundColorView];

セルに余分な色付きのビューを追加すると、パフォーマンスが低下する可能性があります。

于 2014-01-14T01:43:02.083 に答える
6

UItableviewcell の強調表示を無効にするには

cell.selectionStyle = UITableViewCellSelectionStyleNone;

また、ユーザーがセルを操作できないようにする必要があります。

cell.userInteractionEnabled = NO;
于 2013-01-18T00:51:00.160 に答える
6

ストーリーボードから行うこともできます。テーブル ビュー セルをクリックし、[テーブル ビュー セル] の下の属性インスペクターで、[選択] の横にあるドロップダウンを [なし] に変更します。

于 2014-12-04T05:12:56.677 に答える
6

使用できます:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

UITableViewのインデックスパスメソッドの行のセルで。

また、次を使用できます。

[tableView deselectRowAtIndexPath:indexPath animated:NO];

テーブルビューでselectrowatindexpathメソッドを実行しました。

于 2014-07-12T09:06:08.803 に答える
5

UITableViewCell のselectionStyleプロパティを使用できます

 cell.selectionStyle = UITableViewCellSelectionStyleNone;

または

 [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

また、デリゲートの下に実装しないでください

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ... }

Xib/Storyboard ファイルを作成した場合は、tableview のsetUserInteractionEnabled プロパティのチェックを外してNoに変更できます。これにより、テーブルビューが読み取り専用になります。

于 2015-05-15T08:55:20.127 に答える
5

あなたが使用することができます....

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
于 2013-10-08T11:10:34.393 に答える
5

カスタムセルを使用した迅速なソリューション:

import Foundation

class CustomTableViewCell: UITableViewCell
{
  required init(coder aDecoder: NSCoder)
  {
    fatalError("init(coder:) has not been implemented")
  }

  override init(style: UITableViewCellStyle, reuseIdentifier: String?)
  {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    self.selectionStyle = UITableViewCellSelectionStyle.None
  } 
}
于 2015-02-19T08:54:28.990 に答える
5

これを使用できます

cell.selectionStyle = UITableViewCellSelectionStyleNone;
于 2013-05-10T09:44:26.553 に答える
5
cell.selectionStyle = UITableViewCellSelectionStyleNone;
于 2014-04-10T12:08:13.993 に答える
5

最良の解決策は、選択スタイルなしの作成です

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

ただし、ここでは、選択状態に使用されるカスタム イメージがないことを考慮しています。

于 2013-08-25T13:24:40.017 に答える
2

より良いアプローチは次のとおりです。

cell.userInteractionEnabled = NO;

didSelectRowAtIndexPath:このアプローチはメソッドを呼び出しません。

于 2012-12-17T07:36:11.000 に答える
2

少なくとも iOS 6 では、カスタム セルのメソッドをオーバーライドして、青色のハイライトを防ぐことができます。他の相互作用が無効になったり、影響を受けたりすることはありません。3 つすべてをオーバーライドする必要があります。

- (void) setHighlighted:(BOOL)highlighted
{
}

- (void) setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
}

- (void) setSelected:(BOOL)selected animated:(BOOL)animated
{
}
于 2013-04-25T12:33:27.327 に答える
1

シナリオ - 1

tableviewの特定のセルを選択したくない場合は、それらのセルのcellForRow関数で選択スタイルを設定できます。

Objective-C

cell.selectionStyle = UITableViewCellSelectionStyleNone;

スウィフト 4.2

cell.selectionStyle = .none

シナリオ - 2

テーブルビュー全体で選択を無効にする場合:

Objective-C

self.tableView.allowsSelection = false;

スウィフト 4.2

self.tableView.allowsSelection = false
于 2019-07-25T07:42:42.570 に答える