2016-08-19 20 views
0

TableViewを使用しているアプリで作業していますが、現在以下の問題があります。iOSスウィフトのダブルタップジェスチャ認識機能を無効にする

  • 私のTableViewにはUITextViewがありますが、これは選択可能でなければならないが、編集可能ではない(私はリンクを使用する必要があるため)。

私の問題がある:私は誰もが同じようにリンクをタップすると、それは動作しません
。私はそれを動作させるためにもう少し長く保持する必要があります。私はそれが "Selectable"プロパティのためにDouble Tap Gestureレコグナイザーを持って来たと思ったので、2番目のタップがあるかどうかTextViewがチェックしますが、ダブルタップレコグナイザーだけを見つけて削除する方法はわかりません。

どうすればよいですか?

ありがとうございます。

+0

長押しジェスチャ認識機能を使用できないのはなぜですか? – user3182143

+0

は、助けを目的としたコードを表示します – user3182143

+0

@ user3182143多くのコーディングはありません。 UITextViewはstoryBoardで作成されます。 cellForRowAtIndexPathでは、attributedText.addAttribute(NSLinkAttributeName、value:linkAddress、range:linkWordRange)を使用していくつかのリンクを追加します。そして、attributedTextをtextViewに割り当ててください。タップするだけで簡単にリンクを開くことができます。 –

答えて

0

の検索と削除をダブルタップジェスチャー認識

- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
{ 
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) 
    { 
    [(UITapGestureRecognizer *)gestureRecognizer setNumberOfTapsRequired:1]; 
    gestureRecognizer.enabled = NO; 
    } 
} 

スウィフト

Objective Cのこのコード tapGestureを通じて

func addGestureRecognizer(gestureRecognizer: UIGestureRecognizer) 
{ 
    if gestureRecognizer.isKindOfClass(UITapGestureRecognizer) 
    { 
     (gestureRecognizer as! UITapGestureRecognizer).numberOfTapsRequired = 1 
     gestureRecognizer.enabled = false 
    } 

} 
+0

それは助けになりませんでした –

+0

私の答えを今更新しました – user3182143

0

あなたはタップイベントを処理するためにしました。.. .nu​​mberOfTapsRequired = 1

または

これを行うには、UITableViewCellに1つ埋め込む必要があります。しかし、カスタムセルを作成する必要はありません。ここであなたがやりたいだろうかの基本的な考え方は次のとおりです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     UITextView *comment = [[UITextView alloc] initWithFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, tableView.rowHeight)]; 
     comment.editable = NO; 
     comment.delegate = self; 
     [cell.contentView addSubview:comment]; 
     [comment release]; 
    } 
    return cell; 
} 

あなたは、もちろん、あなたがセルに付属している標準44ptの高さをしたくない場合は、あなたのrowHeightのを設定する必要があります。実際のセルが必要な場合は、独自のロジックを追加して、必要なセルだけをtextViewにする必要がありますが、これが基本的な考え方です。残りの部分はあなたのフィッティングに合わせてカスタマイズすることができます。これが役に立ちますようにお願いします。

EDIT:テキストビューをバイパスして自分のセルに移動するには、これについて2通りの方法があります。

1)あなたは、カスタムのTextViewクラスを作成し、スーパーにメッセージを送信するためにtouchesBeganを上書きすることができます

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
} 

これはあなたのtableViewされるであろう、そのスーパーにタッチイベントを送信します。カスタムUITableViewCellを作成したくないと考えると、おそらくカスタムtextViewクラスを作成したくないと思います。これは私をオプション2に導く。

2)textViewを作成するときは、comment.editable = NO;を削除します。編集可能な状態に保つ必要がありますが、デリゲートメソッドでそれを修正します。あなたのコードで

、あなたはTextViewのデリゲートメソッドを挿入したいと思うでしょうし、我々はそこからすべての私たちの仕事をやる:

EDIT:のUITableViewController

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView { 
// this method is called every time you touch in the textView, provided it's editable; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:textView.superview.superview]; 
    // i know that looks a bit obscure, but calling superview the first time finds the contentView of your cell; 
    // calling it the second time returns the cell it's held in, which we can retrieve an index path from; 

    // this is the edited part; 
    [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
    // this programmatically selects the cell you've called behind the textView; 


    [self tableView:self.tableView didSelectRowAtIndexPath:indexPath]; 
    // this selects the cell under the textView; 
    return NO; // specifies you don't want to edit the textView; 
} 

た場合に使用するには、このコードを変更しますそれはあなたが望むものではありません、私に知らせてください、そして、私たちはあなたをソートします。

1

TextWindowをUIWebViewに置き換え、loadHTMLString関数を実行することを考えましたか?

このようにしてリンクをタップすると、すぐに開きますか? UIWebViewデリゲートを持っていても、リンクが押されたときに何をしたいのですか?(サファリなどで自動開くのではなくカスタムUIWebView)

+0

良い解決策ですが、Appleの 'UITextView Class Reference'では、この状況で' UITextView'を 'UIWebView'に置き換えることは推奨していません。 –

関連する問題