我在ScrollView外面有一个Button1,在scrollview中有另一个Button2。我正在使用故事板。我已经使用从两个按钮拖动segue到不同的视图。 Button1工作正常,问题出在Button2上,无论我点击多少次都无法正常工作,只有当我点击并拖动时才会起作用(奇怪!!)。当我进行故障排除时,我发现每当我创建一个scrollview的插座时,它的行为都是这样的,如果我将scrollview的连接移到插座上它工作正常,但我需要使用scrollview的插座才能工作。关于如何完成这项工作的任何解决方案?这是我的视图的示例代码,如果它有帮助
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg.png"]];
self.scrollView.contentSize =CGSizeMake(320, 500);
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignKeyboard)];
[self.scrollView addGestureRecognizer:singleTap];
singleTap.numberOfTapsRequired = 1;
}
-(void) resignKeyboard
{
[self.view endEditing:YES];
}
这就是我定义插座的方式
@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
请注意,Button2 Click确实有效,但点击并拖动/滑动不是单击或多次点击。
编辑:我检查过,发现它适用于模拟器6.1但不适用于5.0答案 0 :(得分:2)
检查您的按钮2是否在scrollview的范围内。如果按钮的任何部分位于父容器框架之外,则它不会响应任何事件。通过更改scrollview的背景颜色来测试它。您也可以设置button2.clipToBounds = YES
。如果按钮超出界限,该部分将被剪裁。
答案 1 :(得分:2)
我发现问题是因为添加了点击手势,因为当你的按钮在scrollview内部时,第一次点击它适用于scrollview而不是按钮,所以我所要做的就是检查触摸是否是按钮。以下是解决此问题的代码。
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if (self.scrollView.superview != nil) {
if ([touch.view isKindOfClass:[UIButton class]])
{
return NO; // ignore the touch
}
}
return YES; // handle the touch
}
添加委托UIGestureRecognizerDelegate并在viewdidload中添加此行
singleTap.delegate = self;
答案 2 :(得分:0)
我有类似的问题。我所做的是删除涉及有问题视图的整个层次结构(在本例中为Button 2和滚动视图),然后重新创建它们。然后重新创建出口和IBActions。
这是有效的,因为故事板是一个xml文档,有时xcode会在编写时弄乱它。