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

Ios 如何查找特定帧大小的所有子视图?,ios,objective-c,uitableview,uigesturerecognizer,Ios,Objective C,Uitableview,Uigesturerecognizer,我想找到特定帧大小内的所有子视图 我有自己的自定义UITableViewCell,在该单元格中,我附加了各种uiimageview作为UITableViewCell内容视图的子视图,并在每个单元格中添加了uilongpressurerecognizer 我的ui长按手势识别器的操作方法如下所示: - (void)handleLongPressGestureRecgonizer:(UILongPressGestureRecognizer *)sender { if(sender.state

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

我有自己的自定义
UITableViewCell
,在该单元格中,我附加了各种
uiimageview
作为
UITableViewCell
内容视图的子视图,并在每个单元格中添加了
uilongpressurerecognizer

我的
ui长按手势识别器的操作方法如下所示:

- (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);

    }
 }
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);
}
现在我想知道我在
uilongpressurerecognizer
的action方法中找到的框架内的
UIImageView
是什么

但我认为我必须迭代所有单元格contentView子视图,并检查该帧是否与我标识的帧相交

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


谢谢您……

如果您想知道公共superview的指定部分中有哪些视图,那么您确实需要进行一些迭代和“命中检测”。如您所说,使用帧交点是很好的


与迭代所有需要递归的子视图不同,您应该维护一个属性,该属性是所有图像视图的数组,这样您就可以直接迭代该数组并忽略任何其他不感兴趣的子视图。

您可以将干净的代码用于objective c运行时,如下所示: 在头文件中声明:

extern const char* MyConstantKey;
@接口…你的接口

在.m中,您可以这样定义: //这里有私人物品 常量字符*MyConstantKey=“MyConstantKey”

然后像这样的事情:

- (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);

    }
 }
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);
}
您可以像这样关联对象:

- (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);

    }
 }
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);
}

您应该为UIImageView设置标记,UIImageView是UITableViewCell的子视图

您可以获取行的索引:

-(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
 }

标记您的图像视图,根据您将找到的标记,单击的对象是什么我在图像视图中没有使用选项卡手势。我在每个单元格中添加了长按手势,这是我在问题中提到的。我想找出位于该框架内的所有图像视图。检查这个答案@Mihai pop,我知道这种方法,所以我在问题中提到了迭代所有子视图的方法,但是,我的问题仍然是任何其他替代方法,并且有实现此功能的简单方法,或者这是最好的方法。无论如何感谢ans…据我所知,这就是解决方案:通过子视图循环。如果“当前”视图处理触摸,则触摸事件不会传递到子视图。因此,我想您必须循环遍历所有子视图,并检查帧是否相交。我可以使用cell.contentview.subviews来获得单元格的所有子视图,而不是使用一个数组来存储所有图像视图信息。becz,我没有在我的手机中添加任何其他视图。但是我的单元格样式是默认的,因此根据
UITableViewCell
type default,正确地提供它自己的标签、图像等。您可以运行一个测试,查看内容视图中有哪些子视图(您可以在添加子视图时考虑删除它们),目的是?嗨,Alok先生,您有我的问题吗?@Wain抱歉,我把您的问题搞错了,基本上,问题更多的是关于获取仅包含在长新闻区域中的视图,而不是如何传递数组:(