滚动视图滚动时,scrollview的子视图不会触摸事件

时间:2011-08-02 06:33:13

标签: iphone objective-c uiscrollview

我有一个scrollView,其中添加了一些imageViews 我希望在scrollView滚动时,imageViews也应该获得触摸事件。 但事实并非如此。

一次只发生两件事中的一件。 scrollView滚动但imageViews没有触摸事件 或imageViews获取触摸事件,而scrollView不会滚动。

不能同时发生这两件事。 请建议。

5 个答案:

答案 0 :(得分:1)

您可以使用“点击手势识别器”在图像添加到滚动视图时获取图像上的事件。 的修改

您可以参考以下代码:

-(void)yourGestureRecognizer
{

UITapGestureRecognizer *yourTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    [yourImageView addGestureRecognizer:yourGestureRecognizer];
    [yourGestureRecognizer release];
}

您可以点击此处:

-(void)handleTap:(UIGestureRecognizer *)sender{

    UIImageView *imageView = (UIImageView *)sender.view;

    switch (imageView.tag)
    {
        case 1: 
            m_pYourInstance=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
            [self.navigationController pushViewController:XXXXX animated:YES];
            break;
}

希望这会有所帮助!!

答案 1 :(得分:1)

我知道这是在不久前发布的,但是......

默认情况下,UIImageView对象的属性userInteractionEnabled设置为NO。这可能是触摸没有注册的原因。这让我不止一次地绊倒了它,这是只有经验才有帮助的小事之一。

将其设置为YES,看看是否修复了它。

答案 2 :(得分:0)

使用UIGestureRecognizer。将识别器添加到图像视图中。

如果您要定位一些旧的iOS版本,请查看此link

答案 3 :(得分:0)

使用UIButtons并在其上设置背景图像。这是用于布局UIScrollView子视图的循环:

for (int i = 0; i < [images count]; i++) {
  CGRect aFrame = ...;
  UIButton *button = [[[UIButton alloc] initWithFrame:aFrame] autorelease];
  [button setImage:[images objectAtIndex:i] forState:UIControlStateNormal];
  button.tag = i;
  [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
  [scrollView addSubview:button];
}

在这里处理触摸事件:

- (void)buttonClicked:(id)sender {
  UIButton *button = (UIButton *)sender;
  [self performActionWithImageAtIndex:[images objectAtIndex:button.tag]];
}

这将省略创建额外手势识别器的需要,并将减少样板工作量。

- 编辑

你的UIImageViews没有检测到触摸的另一个原因是你在代码中创建它们而忘记将userInteractionEnabled设置为YES。

答案 4 :(得分:0)

是的,你可以做到这两点。你需要通过子类化来定制你的uiimageview,并且必须添加Tap Gesture Recognizer,如:

<。>文件中的

@interface CustomView : UIImageView 
{
  // your variables
}
<。>文件中的

//when you create an instants of your image view UITapGestureRecognizer will added in all your instants.
- (id)initWithFrame:(CGRect)frame 
{
    if ((self = [super initWithFrame:frame])) 
    {
        // add Gesture for tapping
        UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                    action:@selector(tap:)];
        tap.numberOfTapsRequired = 1;

        [self addGestureRecognizer:tap];
     }
return self;
}

然后在.m文件中添加委托方法

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
     UITouch *touch = [touches anyObject]; 
}

现在在您的自定义单元格中,使用Tap Gesture Recognizer添加自定义图像视图

希望它能帮到你......