scrollView 上的触摸功能

Posted

技术标签:

【中文标题】scrollView 上的触摸功能【英文标题】:Touch functionality on scrollView 【发布时间】:2012-12-14 10:42:46 【问题描述】:

我正在开发一个应用程序,我的任务是从我创建滚动视图并将图像放置在滚动条上的数据库中获取 url 链接。 我编写了一些代码,当我单击图像时,我必须在我放置在滚动视图上方的 web 视图中显示 url 页面。 为此,我编写了用于在单击图像时获取 url 的触摸代码,但是我遇到了问题,例如我的单击在图像和滚动视图上也不起作用,但它在图像和滚动视图的下部起作用一个正常的视图。你可以在下面找到我的触摸码

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
   
    UITouch * touch = [[event allTouches] anyObject];   
    for(int index=0;index<[array count];index++)


    UIImageView *imgView = [array objectAtIndex:index];  
      if(CGRectContainsPoint([imgView frame], [touch locationInView:scrollView]))
          
            NSString *strgetcontenturl = [[NSString alloc]initWithString:[arrayvideoFile objectAtIndex:index]];  
            NSURL *url = [NSURL URLWithString:strgetcontenturl];  
            [webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:strgetcontenturl]]];
            NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];  
             [webview loadRequest:requestObj];

        

这里 array 是我存储所有图像的地方,而 arrayvideoFile 是我存储所有 url 的地方。

请帮忙。

【问题讨论】:

你是如何在滚动视图上添加图片的? 【参考方案1】:

您是如何将图像放置到 scollview 中的?图像视图?

我会将它们与 UIButton (CustomType) 一起放置,然后您可以将目标添加到该按钮而无需检测触摸。因为 UIButton 已经检测到触摸事件。

UIButton *button = [UIButton butttonWithType:UIButtonTypeCustom];
UIImage * buttonImage = ....
[button setImage:buttonImage forState:UIControlStateNormal];
button.frame = CGRectMake(x, y, buttonImage.size.width, buttonImage.size.height);
[button addTarget:self
           action:@selector(buttonAction:)
 forControlEvents:UIControlEventTouchUpInside];
[scrollview addSubview:button];

编辑:添加代码

【讨论】:

我忘了提到我正在从数据库中获取图像我试图将图像提供给按钮背景,但没有成功 请找出我刚刚发现的问题的变化@mert【参考方案2】:

使用下面的代码。

for(int Tag =0; Tag < [array count]; Tag++) 
    UIButton *btn_URL = [UIButton butttonWithType:UIButtonTypeCustom];

    UIImage * btn_URL = [btn_URL setImage:buttonImage forState:UIControlStateNormal];

    btn_URL.frame = CGRectMake(x, y, buttonImage.size.width, buttonImage.size.height);

    [btn_URL addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];

    btn_URL.tag = Tag;

    [scrollview addSubview:btn_URL];


-(void)buttonAction:(id)sender 
    NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[array objectAtIndex:[sender Tag]]]];


在这里您可以将用户重定向到 URL。

如果您需要任何帮助,请告诉我。

谢谢,

合芒。

【讨论】:

我可以在触摸代码之间或我声明图像的位置粘贴此代码 No.... 不要使用触摸方法。粘贴 for 循环您要在滚动视图中添加具有图像的按钮的位置,然后在下面的方法中检测操作。【参考方案3】:

只需设置imgView.userInteractionEnabled=YES;,它可能会对您有所帮助。

否则使用此代码

UIScrollView *scrollview4preview=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height-44)];
    scrollview4preview.backgroundColor=[UIColor clearColor];
    [self.view addSubview:scrollview4preview];

    int yval=0;
    for (int i=0; i<[arrary count]; i++) 
        UIButton *btn4preview=[[UIButton alloc]init];
        btn4preview.tag=i;
        btn4preview.frame=CGRectMake(scrollview4preview.frame.origin.x+10, i*yval, 150, 150);
        [btn4preview setImage:[UIImage imageNamed:@"YourImageName.png"] forState:UIControlStateNormal];
        [btn4preview addTarget:self action:@selector(btnPreviewSelect:) forControlEvents:UIControlEventTouchUpInside];
        btn4preview.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin;
        [scrollview4preview addSubview:btn4preview];

    

    scrollview4preview.contentSize=CGSizeMake(scrollview4preview.frame.size.width, yval+160);


-(void)btnPreviewSelect:(id)sender

    UIButton *btn=(UIButton *)sender;

NSString *strgetcontenturl = [[NSString alloc]initWithString:[arrary objectAtIndex:btn.tag]];
NSURL *url = [NSURL URLWithString:strgetcontenturl];
[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:strgetcontenturl]]];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webview loadRequest:requestObj];


【讨论】:

[btn4preview setImage:[UIImage imageNamed:@"YourImageName.png"] forState:UIControlStateNormal];在这里我可以放置我的数组来存储来自 db 的所有图像,因为我有不止一张图片

以上是关于scrollView 上的触摸功能的主要内容,如果未能解决你的问题,请参考以下文章

辞去 ScrollView Touch 上的第一响应者

如何将触摸事件从 ScrollView 子视图传递到它的父视图

UITapGestureRecognizer 正在覆盖 Scrollview 上的 UIButton 操作

Android:ScrollView 与 NestedScrollView

TouchableOpacity 内的 ScrollView

如何在 ScrollView 中居中 UIImageView(缩放)