如何查找特定帧大小的所有子视图?

时间:2014-04-15 13:32:32

标签: ios objective-c uitableview uigesturerecognizer

我想查找特定帧大小内的所有子视图。

我有自定义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);

    }
 }

现在,我想了解UIImageViewUILongPressGestureRecognizer的操作方法中找到的{{1}}内的内容。

但我想我必须迭代所有的cell contentView子视图并检查该帧是否与我识别的帧相交。

要么我的方法是正确的,要么有任何其他简单的方法来实现这一点,请帮助我。

谢谢...

3 个答案:

答案 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
 }