无法触摸 UIScrollView 中的 UIButton
Posted
技术标签:
【中文标题】无法触摸 UIScrollView 中的 UIButton【英文标题】:Can't touch UIButton in UIScrollView 【发布时间】:2014-12-27 14:06:55 【问题描述】:我正在UIScrollView
内部的视图中以编程方式创建按钮。我还以编程方式创建了UITextField
。我可以整天选择并在文本字段中输入数据。但我无法得到任何按钮被触摸的迹象。我可以将它们添加到主视图中并且它们可以工作。但是当添加到UIScrollView
内部的视图中时,它们会丢失在另一个维度中。我已经阅读了大量关于设置userInteraction
、delayContentTouches
和通过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];
partSetupView
是UIScrollView
中的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的主要内容,如果未能解决你的问题,请参考以下文章
UIButton 没有响应嵌套在另一个 UIScrollView 中的 UIScrollView 中的触摸
嵌入在 UIScrollview 中的 UIWebview 中的 Javascript 触摸事件
通过 UITapGestureRecognizer 获取 UIScrollView 中的触摸点