Ios 滚动视图中的UIButton未触发操作
在scrollView中有一个名为SubadView的视图,这个SubadView动态生成按钮。目前,如果按钮的数量不适合单行(即在我的SubadView中,宽度约为320,高度约为54),视图高度将扩展,并可滚动。此外,还有删除按钮的规定。现在,如果我在多行中有更多的按钮,只需简单地删除它们就可以了,没有问题,但是如果我做一些滚动,然后删除按钮,它就会工作,直到按钮适合单行,一旦视图缩小到包含单行中的按钮,里面的按钮就不会触发动作。奇怪!!不过,如果我不滚动,只是简单地删除按钮,它的工作。我不知道滚动的问题是什么,只要我做一些滚动,然后删除按钮,它的工作,直到他们适合在一行。我使用了点击手势和所有,触摸确实触发了点击手势方法并返回“否”,但没有触发任何标志按钮动作,似乎按钮已禁用,但日志显示其已启用。下面是我的代码和一些日志。如果你能帮忙,我将不胜感激 //轻触手势部分Ios 滚动视图中的UIButton未触发操作,ios,iphone,objective-c,uiscrollview,uibutton,Ios,Iphone,Objective C,Uiscrollview,Uibutton,在scrollView中有一个名为SubadView的视图,这个SubadView动态生成按钮。目前,如果按钮的数量不适合单行(即在我的SubadView中,宽度约为320,高度约为54),视图高度将扩展,并可滚动。此外,还有删除按钮的规定。现在,如果我在多行中有更多的按钮,只需简单地删除它们就可以了,没有问题,但是如果我做一些滚动,然后删除按钮,它就会工作,直到按钮适合单行,一旦视图缩小到包含单行中的按钮,里面的按钮就不会触发动作。奇怪!!不过,如果我不滚动,只是简单地删除按钮,它的工作。我不
-(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
}
//这是触发按钮动作的功能
-(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];
}
}
}
-(无效)b选择:(ui按钮*)按钮
{
NSLog(@“按钮%ld已单击”,(长整型)[按钮标记];
if(button.tag==0)
{
[自推分组类别选择];
for(self.subADCView.subview中的id btn)
{
如果([btn标签]!=-999)
{
if([btn IsKindof类:[UIButton类]])
{
[btn removeFromSuperview];//删除按钮
}
}
}
_SubadView.frame=CGRectMake(_subadView.frame.origin.x,_subadView.frame.origin.y,_subadView.frame.size.width,54.0);
}
其他的
{
if(_categoryEditDetails.count==1)
{
showAlert(@“消息”,“组应至少有1个类别”,字符串\u常量\u正常,无);
}
其他的
{
[categoryListDeleted addObject:[@{
@“id:[NSString stringWithFormat:@”%ld),(长)按钮.tag]
}可变拷贝]];
for(self.subADCView.subview中的id btn)
{
如果([btn标签]!=-999)
{
if([btn IsKindof类:[UIButton类]])
{
[btn removeFromSuperview];//删除按钮
}
}
}
_SubadView.frame=CGRectMake(_subadView.frame.origin.x,_subadView.frame.origin.y,_subadView.frame.size.width,54.0);
对于iOS 7的XCode 5中的(i=0;i),存在一个bug,可以通过关闭自动布局来解决此问题
只需在侧边栏中取消选中此框,您就可以开始了
我无法找到确切的问题,但我认为这与视图大小和scrollview内容大小有关,尽管在日志中一切似乎都很好。无论如何,我删除了我的SubadView,并直接在scrollview中添加了动态按钮,效果很好,没有任何问题。是否为scroll设置了用户交互视图?。如果子视图没有响应,则可能是父视图的大小很小,或者帧在子视图开始之前结束。检查您的滚动内容大小。是的,设置了userinteraction,user1111我检查了滚动帧大小,但没有检查内容大小。我也会检查。好的,我仍然让答案保持不变因为它可以帮助别人。祝你一切顺利!
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