10

多くのビューがあるカスタムの複雑な UITableViewCell があります。その中に特定の条件で表示される UIImageView があります。見えるときは、

  1. ユーザーがそのUIImageViewをタップしたときに、いくつかのアクションを実行する必要があります。

  2. このタスクのセレクターをトリガーする必要があることはわかっています。しかし、私はまた、私が話している UITableViewCell の私の UIImageView でタップのアクションとして呼び出されるそのメソッドに値を渡したいです (以下の -(void)onTapContactAdd :(id) sender : (NSString*) uid を参照してください)。 . その渡された値を使用して、呼び出されたメソッドがその仕事をするからです。

これが私がこれまでに試したことです。

cell.AddContactImage.hidden = NO ;
cell.imageView.userInteractionEnabled = YES;

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapContactAdd::)];
[tap setNumberOfTouchesRequired:1];
[tap setNumberOfTapsRequired:1];
[tap setDelegate:self];
[cell.AddContactImage addGestureRecognizer:tap];



-(void)onTapContactAdd :(id) sender : (NSString*) uid
{
    NSLog(@"Tapped");
// Do something with uid from parameter
}

このメソッドは、タップしても呼び出されません。ヘッダーファイルに追加しました。

事前にご協力いただきありがとうございます。

4

6 に答える 6

14

理想的な解決策ではないかもしれませんが、各 UIImageView にタグを追加してください。次に、タグ値に対応する uid を持つ NSArray を用意します。

したがって、コードのどこかで配列を作成します

NSArray *testArray = [NSArray arrayWithObjects:@"uid1", @"uid2", @"uid3", @"uid4", @"uid5", @"uid6", nil];

次に、テーブルビューのセルを設定するときに、タグを行に設定します #

//Set the tag of the imageview to be equal to the row number 
cell.imageView.tag = indexPath.row;

//Sets up taprecognizer for each imageview
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                      action:@selector(handleTap:)];
[cell.imageView addGestureRecognizer:tap];

//Enable the image to be clicked 
cell.imageView.userInteractionEnabled = YES;

次に、呼び出されるメソッドで、このようなタグを取得できます

- (void)handleTap:(UITapGestureRecognizer *)recognizer  
{    
     NSString *uid = testArray[recognizer.view.tag];    
}
于 2013-11-04T06:17:46.760 に答える
0

ALActionBlocks を使用してジェスチャーをUIImageViewに追加し、アクションをブロックで処理できます

__weak ALViewController *wSelf = self;
imageView.userInteractionEnabled = YES;
UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithBlock:^(UITapGestureRecognizer *weakGR) {
    NSLog(@"pan %@", NSStringFromCGPoint([weakGR locationInView:wSelf.view]));
}];
[self.imageView addGestureRecognizer:gr];

インストール

pod 'ALActionBlocks'
于 2016-12-27T15:12:39.267 に答える
0

ジェスチャ レコグナイザーは、1 つの引数のみをアクション セレクターに渡します。したがって、uid 値だけを渡す必要があります。このように。

これは cellForRowAtIndexPath: メソッド内にあると推測します

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //code
    cell.AddContactImage.hidden = NO ;
    cell.imageView.userInteractionEnabled = YES;
    cell_Index=indexPath.row ;
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self               action:@selector(onTapContactAdd:)];   //just one arguement passed
    [tap setNumberOfTouchesRequired:1];
    [tap setNumberOfTapsRequired:1];
    [tap setDelegate:self];
    [cell.AddContactImage addGestureRecognizer:tap];
    //rest of code
}

-(void)onTapContactAdd :(NSString*) uid
{
     NSLog(@"Tapped");
     CustomCell *cell=(CustomCell *)[yourtableView cellForRowAtIndexPath:[NSIndexPath  indexPathForRow:cell_Index inSection:0]]; 
     //cell.AddContactImage will give you the respective image .
     // Do something with uid from parameter .
}

したがって、ここで、それぞれのカスタムセルで表示されている画像をタップすると、onTapContactAdd: メソッドが対応する uid 値 (パラメーター) で呼び出され、cell.AddContactImage にもアクセスできるようになりました。パラメータも一緒に。それが役に立てば幸い!!!

于 2013-11-04T07:35:34.423 に答える