【问题标题】:UIButton touch up inside event not working in ios5 while it's ok in ios6UIButton touch up inside 事件在 ios 5 中不起作用,而在 ios 6 中可以
【发布时间】:2012-12-01 00:00:37
【问题描述】:

我有一个项目,其中包含大量 UIButton,使用 xcode 4.5 和故事板和 ARC。在ios6中测试后,一切正常。但是在 ios5 中,UIButton touch up 里面的事件不起作用,动作没有被调用。我尝试使用 touch down 并且它有效。但是,我有很多 UIButton,我无法一一更改。更重要的是,触地事件确实提供了很好的体验。

我在许多视图控制器中使用了以下代码: 在 viewDidLoad 中:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                      action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];

-(void)dismissKeyboard {
       [aTextField resignFirstResponder];
}

这可能是原因。我稍后会检查一下。但它适用于ios6。 你知道出了什么问题吗?非常感谢!

【问题讨论】:

    标签: ios5 ios6 uibutton storyboard


    【解决方案1】:

    我遇到了同样的问题。 那是因为iOS5中的touch事件在你注册的gestureRecognizer捕获事件时被阻止了。

    有两种解决方案。

    一个:

    1) 在您的视图中添加一个新视图。它应该与按钮具有相同的级别。按钮的优先级应该高于新视图。

    2) 将“addGestureRecognizer”的调用更改为新视图。

    [self.newView addGestureRecognizer:tap];
    

    两个:

    1) 实现下面的代码。当点在按钮中时,您应该返回 NO。

    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
    {
        CGPoint point = [gestureRecognizer locationInView:self.view];
    
        NSLog(@"x = %.0f, y = %.0f", point.x, point.y);
        if (CGRectContainsPoint(self.testBtn.layer.frame, point))
            return NO;
    
        return YES;
    }
    

    ps。 你应该导入 QuartzCore.h 来访问图层的属性。

    #import <QuartzCore/QuartzCore.h>
    

    【讨论】:

    • 感谢您的解决方案!帮助很大
    【解决方案2】:

    只需在 UITapGestureRecognizer 点击上使用属性“cancelsTouchesInView”(否)

    例子:

    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap)];
    gesture.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:gesture];
    

    【讨论】:

    • @JarnoV 我如何从 Xamarin IOS 做到这一点?
    • @JorgeWanderSantanaUreña,我没有使用 Xamarin 的经验。对不起 ;)
    • @JarnoV,我做到了:
      UITapGestureRecognizer 手势 = new UITapGestureRecognizer();手势.AddTarget(() => Console.WriteLine("完成"); });手势.CancelsTouchesInView = false; ButtonView.AddGestureRecognizer(手势);但仍然无法正常工作:/
    • 完成,问题是按钮在父视图框架之外。我解决了它覆盖父视图 pointinside 方法,设置新的自定义帧大小
    【解决方案3】:

    覆盖您的按钮父视图 pointinside 方法,设置包含您的按钮的新自定义框架大小。

    【讨论】:

      猜你喜欢
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      相关资源
      最近更新 更多