在 ios 的滚动视图内检测按钮的触摸

Posted

技术标签:

【中文标题】在 ios 的滚动视图内检测按钮的触摸【英文标题】:detecting touch on a button inside a scroll view in ios 【发布时间】:2013-12-05 11:33:19 【问题描述】:

我有一个带有自定义单元格的表格视图。在单元格内部有一个水平滚动的滚动视图。在表格视图单元格上添加了一个按钮。但是按钮没有通过触摸响应。按钮没有添加到滚动条上视图。单击此按钮时,我的任务是更改其后面的滚动视图的偏移量,就像下一个按钮一样。如何检测触摸?这是我将内容添加到滚动视图的代码。

 for(int i=0;i<[exerciseArrayForeachSection count];i++)

        Exercise *data = [exerciseArrayForeachSection objectAtIndex:i];

        [_customCell.exTitleLabel setText:data.exName];
         if([data.exImage length] < 1)
             [[AsyncImageLoader sharedLoader] cancelLoadingURL:_customCell.exThumbImageView.imageURL];
         
      else  if ([data.exImage length] > 0)
        
            int intExerId = [data.exImage intValue];
            NSString *fullPathString = [NSString stringWithFormat:@"%@%d/%@",EXER_URL,intExerId,data.exImage];
            NSURL* aURL = [NSURL URLWithString:fullPathString];


            _customCell.exThumbImageView.imageURL = aURL;
            imageUrlDetails=fullPathString;
        

     [_customCell.scroll addSubview:_customCell.excerciseDetailsView];


         _customCell.scroll.contentOffset=CGPointMake(_customCell.scroll.contentOffset.x+320, _customCell.scroll.contentOffset.y);

        

    [_customCell addSubview:_customCell.scroll];
     [_customCell.scroll bringSubviewToFront:_customCell.nextBtn];


        

从自定义单元格视图中调用按钮单击的方法,例如:

-(IBAction)nextClickActn:(id)sender
   [[self delegate]nextButtonAction:self];

在表格视图控制器中,

- (void)  nextButtonAction:(id)sender 

    UITableViewCell *cell = (UITableViewCell *)sender;
    _customCell=(CustomCellFor_Dashboard*)cell;


   if ( _customCell.scroll.contentOffset.x <= _customCell.scroll.contentSize.width ) 
       CGRect frame;
       frame.origin.x = _customCell.scroll.contentOffset.x +_customCell.scroll.frame.size.width;
       frame.origin.y = 0;
       frame.size = _customCell.scroll.frame.size;
       [_customCell.scroll scrollRectToVisible:frame animated:YES];
      // pageControlBeingUsed = YES;
   


【问题讨论】:

你在按钮中添加了目标方法吗? @keyurbhalodiya 编辑了 question.target 方法正在从 tableview 单元类调用,该方法在上面给出 [btn addTarget:self action:@selector(nextButtonAction :) forControlEvents:UIControlEventTouchUpInside]; 问题是 nextButtonAction 被称为从 snother 视图的委托方法。 ok 然后设置 if 条件是否从 uitableview 单元格调用。使用 1 个布尔变量。 【参考方案1】:

试试这个, 将此实现到 cellForRowAtIndexPath 方法中:

UIButton *accessoryView = [[UIButton alloc] initWithFrame:CGRectMake(190, 5, 40, 41)];

accessoryView.tag = indexPath.row;
             [accessoryView addTarget: self action:@selector(yourMethodWhichUWantToCall:)forControlEvents:UIControlEventTouchUpInside];
             cell.accessoryView = accessoryView;

然后在该方法中实现以下代码:

UIButton *accessoryView = (UIButton *)sender;

UITableViewCell *cell;

if(isios7)

   cell = (UITableViewCell *)accessoryView.superview.superview;

else

   cell = (UITableViewCell *)accessoryView.superview;

【讨论】:

但它甚至没有调用这个方法 -(IBAction)nextClickActn:(id)sender;点击【参考方案2】:

我认为你需要使用这条线

self.button.userInteractionEnabled = YES;

或者你可以使用。

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];

// prevents the scroll view from swallowing up the touch event of child buttons
tapGesture.cancelsTouchesInView = NO;    

[pageScrollView addGestureRecognizer:tapGesture];

【讨论】:

按钮交互已启用,在添加滚动视图之前,触摸检测正常。 button.clipToBounds = YES - 试试这个

以上是关于在 ios 的滚动视图内检测按钮的触摸的主要内容,如果未能解决你的问题,请参考以下文章

如何检测iCarouselButtonDemo的触摸点?

带有 UIButtons 的 UIScrollView - 当按钮开始触摸时,滚动视图不会滚动

子类 UIScrollView 检测按钮内的触摸,但对用户交互无响应

UiScrollview scrollviewDidScroll 检测用户触摸

UIScrollView 未检测到折叠后的触摸

TapgestureRecognizer 将触摸检测为滚动视图