Bri*_*yle 15 iphone selector ios uitapgesturerecognizer
在我的应用中,我在运行时动态地将图像添加到我的视图中.我可以同时在屏幕上显示多个图像.每个图像都是从一个对象加载的.我在图像中添加了一个tapGestureRecongnizer,以便在点击它时调用相应的方法.
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)];
[plantImageView addGestureRecognizer:tapGesture];
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道我拍了什么图像.我知道我可以调用tapGestureRecognizer.location来获取屏幕上的位置,但这对我来说并不是很好.理想情况下,我希望能够将加载图像的对象传递到点击手势.但是,似乎我只能传递选择器名称"imageTapped:"而不是它的参数.
- (IBAction)imageTapped:(Plant *)plant
{
[self performSegueWithIdentifier:@"viewPlantDetail" sender:plant];
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道我可以将我的对象作为参数传递给tapGestureRecongnizer的方式或者我可以处理它的任何其他方式?
谢谢
布赖恩
dan*_*anh 27
你快到了.UIGestureRecognizer具有视图属性.如果您为每个图像视图分配并附加手势识别器 - 就像您在代码片段中看到的那样 - 那么您的手势代码(在目标上)可能如下所示:
- (void) imageTapped:(UITapGestureRecognizer *)gr {
UIImageView *theTappedImageView = (UIImageView *)gr.view;
}
Run Code Online (Sandbox Code Playgroud)
从您提供的代码中可以清楚地看出,如何将Plant模型对象与其对应的imageView相关联,但它可能是这样的:
NSArray *myPlants;
for (i=0; i<myPlants.count; i++) {
Plant *myPlant = [myPlants objectAtIndex:i];
UIImage *image = [UIImage imageNamed:myPlant.imageName]; // or however you get an image from a plant
UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; // set frame, etc.
// important bit here...
imageView.tag = i + 32;
[self.view addSubview:imageView];
}
Run Code Online (Sandbox Code Playgroud)
现在gr代码可以这样做:
- (void) imageTapped:(UITapGestureRecognizer *)gr {
UIImageView *theTappedImageView = (UIImageView *)gr.view;
NSInteger tag = theTappedImageView.tag;
Plant *myPlant = [myPlants objectAtIndex:tag-32];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18564 次 |
| 最近记录: |