ios - Collection View 中的点击手势无法执行

原文 标签 ios objective-c iphone uicollectionview uitapgesturerecognizer

一切正常,直到我点击图像
这是我的日志——

2017-06-14 16:58:09.451 Sliders Menu[3136:252131] -[DrinkViewController onButtonTapped:]: unrecognized selector sent to instance 0x7ff025d50cd0 2017-06-14 16:58:09.460 Sliders Menu[3136:252131] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DrinkViewController onButtonTapped:]: unrecognized selector sent to instance 0x7ff025d50cd0


这是我的自定义 cell.m 文件(colcell.m)
导入“ColCell.h”
@implementation ColCell
-(void)awakeFromNib {
UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onButtonTapped:)];
[tap setNumberOfTapsRequired:1];
[self addGestureRecognizer:tap];

[super awakeFromNib];
}



-(void)onButtonTapped:(id)sender
{


//the response to the gesture.
//mind that this is done in the cell. If you don't want things to happen from this cell.
//then you can still activate this the way you did in your question.

}
这是我的收藏 View 方法
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

{


ColCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];


if(self.iname!=0){
    
    [cell setTag:indexPath.row];    // set tag to the indexPath.row so we can access it later
    
    // add interactivity
    UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onButtonTapped:)];
    
    [tap setNumberOfTapsRequired:1];
    
    [cell addGestureRecognizer:tap];
    
    NSString *fileName = [NSString stringWithFormat:@"%@",self.iname]; //objectAtIndex:indexPath];
    
    NSLog(@"%@",fileName);
    
    NSString *baseurl=[NSString stringWithFormat:@"http://test.kre8tives.com/barebon/upload/"];
    
    NSDictionary *dict = self.iname[indexPath.row];
    
    NSLog(@"%@", [self.iname objectAtIndex: indexPath.row]);
    
    NSString *paths = [NSString stringWithFormat:@"%@%@", baseurl, dict];
    
    NSLog(@"@@@@%@",paths);
    
    [NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:paths]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
        
        NSLog(@"%@",response);
        
        
        UIImage *imgage = [[UIImage alloc] initWithData:data];
        UIImageView *dimg = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)];
        dimg.clipsToBounds = YES;
        [cell.dimg setImage:imgage];
        
        
        if(cell.dimg==!nil)
        {
            NSLog(@"Not nil");
        }
        else{
            NSLog(@"nil");
        }
        if(cell.lbl==!nil)
        {
            NSLog(@"Not nil");
        }
        else{
            NSLog(@"nil");
        }
        
        cell.dimg.image=imgage;
        cell.lbl.text=[self.tempz objectAtIndex:indexPath.row];
        self.catid=[self.categoryid objectAtIndex:indexPath.row];
        NSLog(@"%@",[self.iname objectAtIndex:indexPath.row]);
    }];
}
    //if (cell.selected) {
 //   cell.backgroundColor = [UIColor blueColor]; // highlight selection
  // }
 // else
  // {
    // cell.backgroundColor = [UIColor redColor]; // Default color
  // }
   return cell;
 }

 -(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *datasetCell =[collectionView cellForItemAtIndexPath:indexPath];
datasetCell.backgroundColor = [UIColor redColor]; // Default color
[self performSegueWithIdentifier:@"d2" sender:self];
}
我的目标是执行 segue 图像被点击并通过 segue 发送数据但我的问题是如果我点击图像我会收到错误并且我有所有的连接和一切工作 gr8 !

最佳答案

   UIImageView *dimg = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)];
    dimg.clipsToBounds = YES;
    [cell.dimg setImage:imgage];
    [cell.dimg  setUserInteractionEnabled:YES];
 [cell.dimg setTag:indexPath.row];    // set tag to the indexPath.row so we can access it later

// add interactivity
UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onButtonTapped:)];

[tap setNumberOfTapsRequired:1];

[cell.dimg addGestureRecognizer:tap];

并处理类似的 Action
- (void)onButtonTapped:(UITapGestureRecognizer *)gestureRecognizer {
 //UIImageView *myImage = (UIImageView *)gestureRecognizer.view;
 // do stuff;
NSLog(@"it works");
}

检查collectionview委托(delegate)

它不在 didDeselectItemAtIndexPath
-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {

它在 didselectItemAtIndexPath
-(void)collectionView:(UICollectionView *)collectionView didselectItemAtIndexPath:(NSIndexPath *)indexPath {

关于ios - Collection View 中的点击手势无法执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44543730/

相关文章:

ios - 在解析JSON时使用NSDictionary有什么好处或好处?

objective-c - 很少有iPhone noob问题

iphone - ASIHttpRequest响应的编码问题

iphone - 将 UISearchBar 锁定在 TableView 之上

ios - UITabBarController 不显示 "More"按钮

iphone - 用于日出和日落的Objective-C库?

ios - 从应用程序委托(delegate)获取当前 View Controller

objective-c - 用于objective-c 应用程序的Google API

ios - NSFetchedResultsController 由 NSManagedObject 的 refreshObject 触发。为什么?

ios - 导航到特定的 TabBar 项目