2012-02-11 12 views
2

UITableViewCellの内部にあるNSIndexPathプロパティを持つUITextViewサブクラスがあります。タップするとdidSelectRowAtIndexPathに電話したいと思います。UITextViewサブクラスto didSelectRowAtIndexPath

は、ここで私が持っているものだ:

私は this questionから見
UITapGestureRecognizer *singleFingerTap = 
[[UITapGestureRecognizer alloc] initWithTarget:self action:nil]; 
[theTextView addGestureRecognizer:singleFingerTap]; 
singleFingerTap.delegate = self; 

.... 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 

    CustomTextView *theTextView = (CustomTextView *)touch.view; 

    NSLog(@"%@", theTextView.indexPath); 


    return YES; 

} 

、私も結構です、私のdidSelectRowAtIndexPathロジックを分割する必要があります。そして私はすでにタップされたビューのインデックスパスを知っています。

ジェスチャ認識ツールのメソッドから、このtableViewメソッド(またはdidSelectRowAtIndexPathの機能)を呼び出す適切な方法は何ですか?

答えて

2

I answered a similar question here。基本的にあなたが呼び出すとき:

[tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone]; 

加えて、あなたが直接呼び出すことを余儀なくされているので、テーブルビューは、テーブルビューのデリゲートにtableView:didSelectRowAtIndexPath:を発射しない(そして、あなたは、デリゲートメソッドにコードを書いたので、全く問題はありません):

[tableView.delegate tableView:tableView didSelectRowAtIndexPath:path]; 

はまた、アクションのためのあなたの合格 nilが意味するジェスチャー認識装置が動作しないようにどのように実際にある:

[[UITapGestureRecognizer alloc] initWithTarget:self action:nil]; 

GENER基本的にはタップを受信したときtapRecognized:メソッドを呼び出すためのジェスチャー認識を伝え

[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)]; 

:同盟国、あなたはこのような何かをするだろう。つまり、基本的にはUITableViewControllerまたはtableViewという名前のオブジェクトがあると仮定しています(デフォルトではUITableViewControllerに設定されています)。

-(void)tapRecognized:(UITapGestureRecognizer *)tapGR{ 
    // there was a tap 
    CustomTextView *theTextView = (CustomTextView *)tapGR.view; 
    NSIndexPath *path = theTextView.indexPath; 
    [self.tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone]; 
    [self.tableView.delegate tableView:self.tableView didSelectRowAtIndexPath:path]; 
} 
1

あなたがジェスチャーに反応して、テーブルビュー行上のタップに両方Xを行う必要がある場合は、単に方法Xを作成して呼び出すことあなたのジェスチャー認識の方法からだけでなく、あなたのdidSelectRowAtIndexPathテーブルビューのデリゲートメソッドから。もちろん

、理論的には、

[self tableView:self.tableView didSelectRowAtIndexPath:indexPath]; 

は働くだろうが、私は、デリゲートメソッドを自分呼び出すと、控えめに言って悪いスタイルだと思います。

関連する問題