当我在iOS中创建ScrollView插座时,按钮单击没有在ScrollView中响应

时间:2013-08-30 12:46:24

标签: ios objective-c uiscrollview uiscrollviewdelegate

我在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

3 个答案:

答案 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会在编写时弄乱它。