【问题标题】:Implementing UITapGestureRecognizer directly into UIView instead of ViewController does not work将 UITapGestureRecognizer 直接实现到 UIView 而不是 ViewController 不起作用
【发布时间】:2012-08-30 17:01:23
【问题描述】:

正如this SO-answer 中所述,我正在尝试在UIIMageView 的子类中实现UITapGestureRecognizer。我的方法可以在下面找到。

MenuButtonImageView 的实例是homeScreenViewController.view 的子视图。

我也实现了touchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent:,并且工作正常。

问题:不知何故,handleSingleFingeredTap: 永远不会被调用。这可能是什么问题?

@interface MenuButtonImageView : UIImageView

@property (nonatomic, weak) IBOutlet HomescreenViewController *homeScreenViewController;
@property (nonatomic, readwrite) Visibility visibility;

- (void)handleSingleFingeredTap:(UITapGestureRecognizer *)recognizer;

@end

@implementation MenuButtonImageView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.visibility = HIDDEN;
        self.userInteractionEnabled = YES;
        UITapGestureRecognizer * singleFingeredTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleFingeredTap:)];
        singleFingeredTap.numberOfTapsRequired = 1;
        [self addGestureRecognizer:singleFingeredTap];
    }
    return self;
}

- (void)handleSingleFingeredTap:(UITapGestureRecognizer *)recognizer {
    NSLog(@"handleTap was called"); // This method is not called!
    [self toggleMainMenu];
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { ... }
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { ... }
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { ... }

@end

【问题讨论】:

  • 可能因为您将可见性设置为隐藏而无法正常工作?设置numberOfTouchesRequired = 1.

标签: objective-c ios5 uiimageview uigesturerecognizer


【解决方案1】:

您在initWithFrame 方法中添加识别器。检查您的视图是否以这种方式初始化。它可能是用另一个构造函数创建的,比如initWithCoder,然后你的代码不会被执行。在initWithFrame方法里面放一个断点来查找。

您可以将代码放在单独的方法中,并从两个构造函数中调用它。这取决于你如何使用它。当您从代码创建视图时,initWithFrame 非常常用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多