我想查找特定帧大小内的所有子视图。
我有自定义UITableViewCell
,在该单元格中我附加了各种UIImageViews
作为UITableViewCell
内容视图的子视图,我在每个单元格中添加了UILongPressGestureRecognizer
。
UILongPressGestureRecognizer
的动作方法如下:
- (void)handleLongPressGestureRecgonizer:(UILongPressGestureRecognizer *)sender
{
if(sender.state == UIGestureRecognizerStateBegan)
{
self.startPoint = CGPointMake([sender locationInView:sender.view].x,
[sender locationInView:sender.view].y);
}
if(sender.state == UIGestureRecognizerStateEnded)
{
self.endPoint = CGPointMake([sender locationInView:sender.view].x,
[sender locationInView:sender.view].y);
CGRect frame = CGRectMake(self.startPoint.x, self.bounds.origin.y, self.endPoint-self.startPoint, self.bounds.size.height);
}
}
现在,我想了解UIImageView
在UILongPressGestureRecognizer
的操作方法中找到的{{1}}内的内容。
但我想我必须迭代所有的cell contentView子视图并检查该帧是否与我识别的帧相交。
要么我的方法是正确的,要么有任何其他简单的方法来实现这一点,请帮助我。
谢谢...
答案 0 :(得分:1)
如果你想知道普通超级视图的指定部分中有哪些视图,那么你需要做一些迭代和一次命中检测'。正如你所说的那样使用框架交叉点是好的。
不是迭代所有需要递归的子视图,而是应该维护一个属性,该属性是所有图像视图的数组,以便您可以直接迭代该数组并忽略任何其他不属于的视图。有趣。
答案 1 :(得分:0)
你可以使用带有目标c运行时的干净代码,如下所示: 在头文件中声明:
extern const char* MyConstantKey;
@interface ..... yourInterface
并且在.m中你可以像这样定义: //私人物品来到这里 const char * MyConstantKey =" MyConstantKey&#34 ;;
然后这样的事情:
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
objc_setAssociatedObject(longPress,
(void*)MyConstantKey,
yourArrayOfImageViews,
OBJC_ASSOCIATION_RETAIN);
你可以像这样关联对象:
- (void)longPress:(UILongPressGestureRecognizer*)gesture
{
NSArray *arrayOfImages = objc_getAssociatedObject(gesture, (void*)MyConstantKey);
}
答案 2 :(得分:0)
您应该为UIImageViews设置标签,这是UITableViewCell
的子视图您可以获取行的indexPath:
-(void)handleLongPressGestureRecgonizer:(UILongPressGestureRecognizer *)sender{
CGPoint p = [sender locationInView:self.moTableView];
NSIndexPath *indexPath = [self.moTableView indexPathForRowAtPoint:p];
//get your cell, get all images in your cell
}