无法触摸 UIScrollView 中的 UIButton

Posted

技术标签:

【中文标题】无法触摸 UIScrollView 中的 UIButton【英文标题】:Can't touch UIButton in UIScrollView 【发布时间】:2014-12-27 14:06:55 【问题描述】:

我正在UIScrollView 内部的视图中以编程方式创建按钮。我还以编程方式创建了UITextField。我可以整天选择并在文本字段中输入数据。但我无法得到任何按钮被触摸的迹象。我可以将它们添加到主视图中并且它们可以工作。但是当添加到UIScrollView 内部的视图中时,它们会丢失在另一个维度中。我已经阅读了大量关于设置userInteractiondelayContentTouches 和通过gestureRecognizer 拦截的信息。最后一个可能与我的问题有关。我通过[touch.view isDescendantOfView:self.myScrollViewName] 返回NO。我无法通过[touch.view isKindOfClass:[UIButton class]] 触发它。这让我觉得我错过了一个更根本的错误?

相关: https://***.com/a/6825839/4050489

编辑为每个请求添加按钮代码:

        self.myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        self.myButton.frame = myButtonFrame;
        self.myButton.enabled = interface.isActive;
        self.myButton.userInteractionEnabled = YES;
        self.myButton.exclusiveTouch = YES;

        self.myButton.backgroundColor = [UIColor greenColor];

        //self.myButton. = YES;

        self.myButton.layer.borderWidth=1.0f;
        self.myButton.layer.borderColor=[[UIColor blackColor] CGColor];
        self.myButton.layer.cornerRadius = 10;

        [self.myButton setTag:interface.tag];
        [self.myButton setTitle:interface.Name forState:UIControlStateNormal];

        [self.myButton addTarget:self action:@selector(navigatePartButtons:) forControlEvents:UIControlEventTouchUpInside];

        [self.myButton setEnabled:YES];  //error check


        [self.partSetupView addSubview:self.myButton];

partSetupViewUIScrollView 中的UIView

【问题讨论】:

请发布一些代码示例,了解如何将这些按钮添加到 ScrollView 您可以显式启用showsTouchWhenHighlighted 以查看它是否甚至可以识别触地事件。 我认为它不能识别它。除非添加到UIScrollView 之外的UIView,否则您甚至不会看到文本闪烁。另外,它也不会导致委托被解雇。 UIScrollView 正在干扰或未正确连接,但我迄今为止阅读的解决方案似乎并不能防止这种干扰。似乎是一个普遍的问题。但是文本字段毫不费力地工作。 确保滚动视图的userInteractionEnabled 设置为yes 是的,已经这样做了。另外,投反对票不应该至少意味着该人有一个简单的答案吗? 【参考方案1】:
Try this sample Code:

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];
    UIScrollView *myScroll = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 100, 300, 300)];
    myScroll.backgroundColor = [UIColor redColor];
    [self.view addSubview:myScroll];

    UIView *myView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 300, 200)];
    myView.backgroundColor = [UIColor yellowColor];
    [myScroll addSubview:myView];

    UIButton *myButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 300, 100)];
    myButton.backgroundColor = [UIColor blackColor];
    [myView addSubview:myButton];
    [myButton addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchDown];

-(void)btnClick
    NSLog(@"Button Click");

@end

【讨论】:

这有助于找到答案。您的按钮有效。我的没有。他们之间没有真正的区别。除了位置。尽管看到了按钮并且尽管它们滚动,但我的UIView 框架(partSetupView 框架大小)没有设置为与我的UIScrollView 相同。在我亲自与之抗争之前,我已经看到了它的含义,但我不明白它们的含义。 给了你一个提升,因为你的评论让我走上了正确的道路!

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

UIScrollView 中的触摸交互

UIButton 没有响应嵌套在另一个 UIScrollView 中的 UIScrollView 中的触摸

嵌入在 UIScrollview 中的 UIWebview 中的 Javascript 触摸事件

通过 UITapGestureRecognizer 获取 UIScrollView 中的触摸点

在 UIScrollView 仍处于活动状态的情况下检测视图中的连续触摸位置

UIScrollView 中的触摸事件发送到后面的 tableview