我在 ScrollView 中有一个名为 subADCview 的 View ,这个 subADCView 动态生成按钮。目前,如果按钮的数量不适合单行(即在我的 subADCview 中,宽度约为 320,高度为 54),则 View 高度会扩展并变为可滚动。并且还有删除按钮的规定。现在,如果我在多行中有更多数量的按钮并且只需删除它们就可以正常工作并且没有问题,但是如果我进行一些滚动然后删除按钮它可以工作,直到按钮适合单行,只要 View 减少以包含单行中的按钮,里面的按钮不会触发 Action 。奇怪的!!但是,如果我不滚动而只是简单地删除按钮,它就可以工作。我不知道滚动有什么问题,只要我进行一些滚动然后删除它可以工作的按钮,直到它们适合单行。我已经使用了点击手势和所有,并且触摸确实触发了点击手势方法并返回“NO”,但是没有触发标志按钮 Action ,看起来按钮被禁用但日志显示它已启用。下面是我的代码和一些日志。感谢您是否可以提供帮助。
//点击手势部分
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
NSLog(@"touchview:%@,tag:%d",[touch.view class], touch.view.tag);
if ([touch.view isKindOfClass:[UIButton class]])
{
UIButton *btn=(UIButton*)touch.view ;
NSLog(@"Properties:%@,%hhd,%hhd",btn,btn.userInteractionEnabled,btn.enabled);
}
if (self.scrollView.superview != nil)
{
if ([touch.view isKindOfClass:[UIButton class]]||[touch.view.superview.superview isKindOfClass:[UITableViewCell class]]||[touch.view.superview.superview.superview isKindOfClass:[UITableViewCell class]]||[touch.view.superview isKindOfClass:[UITableViewCell class]])
{
NSLog(@"Value returned is NO");
return NO; // ignore the touch
}
}
NSLog(@"Value returned is YES");
return YES; // handle the touch
}
//这是触发按钮 Action 的函数
-(void)btnSelected:(UIButton *)button
{
NSLog(@"Button %ld Clicked",(long int)[button tag]);
if (button.tag==0)
{
[self pushToGroupCategorySelection];
for (id btn in self.subADCView.subviews)
{
if ([btn tag]!=-999)
{
if ([btn isKindOfClass:[UIButton class]])
{
[btn removeFromSuperview]; //remove buttons
}
}
}
_subADCView.frame=CGRectMake(_subADCView.frame.origin.x, _subADCView.frame.origin.y, _subADCView.frame.size.width, 54.0);
}
else
{
if (_categoryEditDetails.count==1)
{
showAlert(@"Message", @"Group Should Have Atleast 1 category", STRING_CONSTANT_OK,nil);
}
else
{
[categoryListDeleted addObject:[@{
@"id": [NSString stringWithFormat:@"%ld",(long)button.tag]
} mutableCopy]] ;
for (id btn in self.subADCView.subviews)
{
if ([btn tag]!=-999)
{
if ([btn isKindOfClass:[UIButton class]])
{
[btn removeFromSuperview]; //remove buttons
}
}
}
_subADCView.frame=CGRectMake(_subADCView.frame.origin.x, _subADCView.frame.origin.y, _subADCView.frame.size.width, 54.0);
for (NSUInteger i=0;i<_categoryEditDetails.count;i++)
{
if ([[[_categoryEditDetails objectAtIndex:i]valueForKey:@"id"] caseInsensitiveCompare:[NSString stringWithFormat:@"%ld",(long)button.tag]]==NSOrderedSame)
{
[_categoryEditDetails removeObjectAtIndex:i];
break;
}
}
[self addDynamicButtonsForCategories];
}
}
}
这是在我进行任何滚动之前按钮位于单行时的日志
touchview:UIButton,tag:104
Properties:<UIButton: 0xcc99810; frame = (146 0; 134 40); opaque = NO; tag = 104; layer = <CALayer: 0xcca5290>>,1,1
Value returned is NO
Button 104 Clicked
这是当我进行任何滚动后按钮位于单行时它不起作用时的日志
touchview:UIButton,tag:104
Properties:<UIButton: 0xd97f5d0; frame = (146 0; 134 40); opaque = NO; tag = 104; layer = <CALayer: 0xd97a810>>,1,1
Value returned is NO
请注意,在这两种情况下,点击手势都有效并且它可以识别按钮触摸,但在第二种情况下,按钮 Action 没有被触发。我非常感谢任何解决此问题的解决方案,或者如果您能给我更多关于详细故障排除的建议。
最佳答案
我无法找出确切的问题,但我认为这与 View 大小和 ScrollView 内容大小的问题有关,尽管在日志中一切似乎都很好。无论如何,我删除了我的 subADCview 并直接在我的 ScrollView 中添加了动态按钮,它工作得很好,没有任何问题。
关于ios - ScrollView 内的UIButton不触发 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20440290/