2016-12-14 5 views
5

私はObjective CアプリケーションにUITablaViewを持っています。ラベルが付いたカスタムセルとUIImageViewがあります。私は、行の一部を無効にして、ユーザーがこの行の部分をクリックするとdidSelectRowAtIndexPathを無効にしたいとします。UITableViewの行の一部でdidSelectRowAtIndexPathを無効にすることはできますか?

私はこれ欲しい:

enter image description here

が、それは可能ですか?

+1

ボタンを画像に重ねることで、後で機能を実行する必要がある場合にも、セルとセットタグをカバーできます。 – vaibhav

+0

片方向です:selectメソッドを使用する必要はありません。あなたが望む地域にボタンを置いて、それにアクションを与えてください。 – Amanpreet

+0

@ user3745888:動作している場合、回答を受け入れることを検討してください。 –

答えて

1

この問題を解決するには、選択を無効にする部分をカバーするボタンを追加することで、この問題を解決することができます(コードを書く必要はありません)。明らかに、ボタンにはテキストや背景色(クリアカラーでなければなりません)を持たないようにしてください。また、セルの必要な部分が確実に覆われていることを確認するための適切な制約を必ず加えてください。

ボタンをタップすると何も起こりません。実際のタッチイベントは行ではなくボタンに参照されるため、didselectRowは呼び出されません。

これが役に立った。

6

私が考えることができる、シンプルで洗練されたソリューションです。あなたのCustomCellで

私はあなたがあなたがあなたの問題を解決するためにhitTest方法を利用することができます:)左側のImageViewのにIBOutletを保持しているCustomCellを有するされなければならないと考えている:)

をすることとさせて頂きますMyTestCellクラスは、これを書い

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { 
     if self.myImageView.frame.contains(point) { 
      return nil 
     } 
     return super.hitTest(point, with: event) 
    } 

myImageViewがあなたのセル:)すべてはユーザーのタップをしたところチェックしてやっている

の左側にImageViewののIBOuletある

、タッチポイントは内にある場合フレームo f cell image viewあなたはビューとしてnilを返します。あなたがnilを返すと、親ビューにイベントが停止し、最終的にはセルに到達しません。

一方、次のビューにタッチする必要があります。 super iOSのは、最終的にセルに戻ってそれをトレースし、

didSelectRowAtIndexPathはそれが役立ちます:)あなたは、単に画像ビューwidth constraints to 0を変更することがあります

+0

これは間違いなく最高の答えです。あなたの目標を達成するために不要なビューを追加しないでください。 – CZ54

+0

@ cz54:ありがとうございます! –

+0

ansプラス1が良いですが、これはイメージビュー領域にのみ影響します。 – vaibhav

0

ホープトリガされます。あなたが行動したい場所が実行されます。例:

1)イメージをカバーするボタンを使用する場合。

2)ナビゲーションバーを使用するとボタンが表示され、操作が実行されます。

これが役に立ちます。

0

これは非常に簡単なトリックです プロフィール画像の部分にボタンを追加すると、画像のように赤い部分に表示されます(あなたが提供)。ボタンをクリックしてクリックしないでください。

ハッピーコーディング!!!!

0

ボタンを緑の領域に置き、ボタンごとにタグを設定するだけです。 Onclickでは、タグを使用して機能を実行できます。あなたは

もう一つの方法は、あなたのfunctionlity peformことができ、この

func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ 
 

 
let obj: AnyObject = self.dataList.objectAtIndex(indexPath.row); 
 
     cell?.populateCellWithData(obj, indexPath: indexPath) 
 

 
cell?.destinationLabel.userInteractionEnabled = true 
 
     let destRecognizer : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "DestLabelTapped:") 
 
     destRecognizer.numberOfTapsRequired = 1 
 
     destRecognizer.delegate = self 
 
     cell?.destinationLabel.addGestureRecognizer(destRecognizer) 
 

 
}

の内側とDestLabelTappedのよう はわずか2テーブルビューを設定し、側面と一つのテーブルでそれらをサイドスクロール選択可能であり、別ではありません。

0

私の理解では、コンテンツをカバーするボタンや他のUIElementsのトリックは、ターゲットを解決する正しい方法ではありません。ストーリーボードで追加の操作が必要になるため、コンテンツを動的に作成する必要がある場合は、コンテンツや人工的なカバーを制御する必要がある場合など、さまざまな状況で作業する必要があります。

  1. 設定しUITableView選択第二部
  2. No Selectionに入れて、あなたがUIViewでアクティブにする:行うにはいくつかあります。このUIViewはコンテンツコンテナになります。
  3. はあなたが必要なすべてを行うことができますどこIBActionを追加UITapGestureRecognizer

    UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectCellAction:)]; 
    
    のUIView

  4. を追加します。

    - (IBAction)selectCellAction:(id)sender 
    { 
        // do what you need 
    } 
    

そして、すべてのthats。

関連する問題