3

我有 2 个问题,我完全糊涂了。请帮我

1)我面临一个问题,我想将点击侦听器分配给我的子视图内部的图像视图,并且该子视图位于UITableView.

在我的 tableview 单元格中有两个图像视图,我想给它们单击侦听器,并识别它们,例如在哪一行上单击了哪个图像视图等。

如果我写scrollview.userinteractionEnable=YES;的不是我的didSelectRowAtIndexPath不回应。我知道它是因为子视图。但是如果我改变scrollview.userinteractionEnable=NO;了我的didselectrowatIndexpath代码就会执行。但滚动视图不会滚动到水平..

我该怎么办 ?我想要水平滚动加上 Image-view 单击两个 ImageView 上的侦听器。

** 通过 crating scrollview 子类解决点击问题**

这是我的 Customcell 类

cellScrollViewClass *scrollView = [[cellScrollViewClass alloc] initWithFrame:CGRectMake(0.0,0.0,430,187)];
     scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 3,scrollView.frame.size.height);
    scrollView.scrollEnabled=YES;
    scrollView.userInteractionEnabled=YES;

    for (int i = 0; i < 3; i++) {
        CGRect frame;
        frame.origin.x = scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = scrollView.frame.size;

        if(i==2) // to check Last item must be train Engine   
        {
            UIView *EngineView = [[UIView alloc]initWithFrame:frame];
            UIImageView *engineImageView = [[UIImageView alloc]initWithFrame:CGRectMake(-112.5, 6, 430, 180)];
            UIImage *Image = [UIImage imageNamed:@"backengine.png"];
            engineImageView.contentMode = UIViewContentModeScaleAspectFit;
            engineImageView.image = Image;
            [EngineView addSubview:engineImageView];
            [scrollView addSubview:EngineView];  // add 3rd imageview that is Train Engine to end of scrollview
        }
        else{ // Not equal to 2 than it must be wagon of train. 

    UIView *wagon = [[UIView alloc]initWithFrame:frame];
    UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"wagon.png"]];
    wagon.backgroundColor = background;

    UIView *videoviewContainer = [[UIView alloc]initWithFrame:CGRectMake(20, 40, 220 , 200)];

    UIImageView *videoImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0,0, 220, 100)];
    UIImage *bgImage = [UIImage imageNamed:@"video.png"];
    videoImageView.image = bgImage;
    videoviewContainer.contentMode = UIViewContentModeLeft; // set Video Image view to left hand side of wagon UIView
            videoImageView.tag=2;


    [videoviewContainer addSubview:videoImageView];

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
    [videoImageView addGestureRecognizer:singleTap];
    [videoImageView setMultipleTouchEnabled:YES];
    [videoImageView setUserInteractionEnabled:YES];

    UIView *textUiView = [[UIView alloc]initWithFrame:CGRectMake(238,28, 150 , 187)];
    textUiView.contentMode = UIViewContentModeRight;
    UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(28,10, 150 , 87)];
    label.text=@"This is testing text for IOS app to check line are aligned or not and to check video image and nested views for UIviews";
    label.backgroundColor = [UIColor clearColor];
    label.textColor=[UIColor redColor];
    label.numberOfLines = 4;
    [textUiView addSubview:label];

    [wagon addSubview:textUiView];
    [wagon addSubview:videoviewContainer];
    [scrollView addSubview:wagon];
    [self.contentView addSubview:scrollView];
  }
  }
  }
    return self;
  }


  - (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
    {

     NSLog(@"Touch event on view %d",gesture.view.tag);
     }

我像这样创建了 Scrollview 子类..

@implementation cellScrollViewClass
  - (id)initWithFrame:(CGRect)frame
    {
  self = [super initWithFrame:frame];
   if (self) {
    // Initialization code
    NSLog(@"You are in scrollview");
        }
   return self;
     }

这是一种正确的实施方法吗?

在此处输入图像描述

感谢任何帮助。先感谢您。

4

5 回答 5

1

使用UITapGestureRecognizer. 在创建每个图像视图时创建并附加一个轻击手势识别器。在创建图像视图时还要设置它的标签,以便您可以识别它在单元格上是哪一个。

当您从识别器获得回​​调时,您可以通过以下方式获取标签:

recogniser.view.tag

您可以通过在超级视图上循环来获取表格视图单元格,直到找到表格视图单元格类:

UIView *superView = recogniser.view.superview;
while (superView != nil && ![superView isKindOfClass:[UITableViewCell class]]) {
    superView = superView.superview;
}

然后您可以使用从表视图中获取索引路径

[tableView indexPathForCell:superView];
于 2013-04-25T09:00:17.377 回答
0

您可以在具有相同图像视图框架的图像视图上添加自定义按钮,并且您可以在按钮上添加选择器。

于 2013-04-25T12:05:54.243 回答
0

要获得点击监听器以获取UIImageView它的类别并使用touches begin method并将回调委托给“tableViewController”。

使用标签来识别点击了哪张图片和哪一行。

为避免重叠,如果我们已经分配的单元格只需删除以前的图像,这样做有一个else条件。

于 2013-04-25T08:57:08.400 回答
0

您需要实现 UIScrollView 委托回调并检查用户正在执行哪种滚动(水平滚动或垂直滚动​​),然后手动更改 tableview 或滚动视图偏移量,这几乎是我看到这个的唯一方法......

至于您的图像,您需要为 everyImage 设置一个 UIButton 并将它们链接到选择器,然后您可以使用按钮的标签来知道它是什么图像。

于 2013-04-25T09:17:41.083 回答
-1

为了处理 UIImageView 上的手势,请确保您使用的 UIImageView userInteractionEnable = YES默认设置为NO

于 2013-04-25T09:03:18.153 回答