gpt4 book ai didi

ios - 可以让 titleView 接受点击手势吗?

转载 作者:行者123 更新时间:2023-11-29 02:57:46 31 4
gpt4 key购买 nike

在自定义类 MMTimerButton 中,我将按钮设置为响应单击和双击

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self setBackgroundColor: [UIColor clearColor]];
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
singleTapRecognizer.numberOfTapsRequired=1;
singleTapRecognizer.delaysTouchesEnded=YES;

UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
doubleTapRecognizer.numberOfTapsRequired=2;

[singleTapRecognizer requireGestureRecognizerToFail: doubleTapRecognizer];
[self addGestureRecognizer:singleTapRecognizer];
[self addGestureRecognizer:doubleTapRecognizer];
}
return self;
}

我在同一个文件中实现了这样的两种方法

-(void)handleTap:(UITapGestureRecognizer *)sender{
NSLog(@"single tap");
}
-(void)handleDoubleTap:(UITapGestureRecognizer *)sender{
NSLog(@"double tap");
}

在标题中,我声明了两个方法

#import <UIKit/UIKit.h>

@interface MMTimerButton : UIButton
-(void)handleTap:(UITapGestureRecognizer *)sender;
-(void)handleDoubleTap:(UITapGestureRecognizer *)sender;

在 Storyboard中,我向界面添加了一个按钮,并将其自定义类设置为 MMTimerButton。

当我单击按钮(在模拟器中)时没有任何反应。单击一下,单击两次,都没有。

我也尝试过不使用按钮,只是将手势识别器添加到 titleView 中。当我点击模拟器中的标题时没有任何反应

 UITapGestureRecognizer* doubleTap = [[UITapGestureRecognizer alloc] initWithTarget : self action : @selector (handleDoubleTap:)];   
UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget : self action : @selector (handleSingleTap:)];
[singleTap requireGestureRecognizerToFail : doubleTap];
[doubleTap setDelaysTouchesBegan : YES];
[singleTap setDelaysTouchesBegan : YES];
[doubleTap setNumberOfTapsRequired : 2];
[singleTap setNumberOfTapsRequired : 1];
self.navigationItem.title =@"title";
[self.navigationItem.titleView addGestureRecognizer:doubleTap];
[self.navigationItem.titleView addGestureRecognizer:singleTap];

但是,当我将此代码添加到标题 View 时,它工作正常(在模拟器中)

-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{

UILabel *headerLabel = [[UILabel alloc]init];
headerLabel.tag = section;
headerLabel.userInteractionEnabled = YES;
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.text = [NSString stringWithFormat:@"0:00",section];
headerLabel.textAlignment = UITextAlignmentCenter;

headerLabel.frame=CGRectMake(10,-5,tableView.frame.size.width,41);

UITapGestureRecognizer* doubleTap = [[UITapGestureRecognizer alloc] initWithTarget : self action : @selector (handleDoubleTap:)];

UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget : self action : @selector (handleSingleTap:)];
[singleTap requireGestureRecognizerToFail : doubleTap];
[doubleTap setDelaysTouchesBegan : YES];
[singleTap setDelaysTouchesBegan : YES];
[doubleTap setNumberOfTapsRequired : 2];
[singleTap setNumberOfTapsRequired : 1];
self.navigationItem.title =@"title";
[headerLabel addGestureRecognizer:doubleTap];
[headerLabel addGestureRecognizer:singleTap];

return headerLabel;

//return nil;
}

最佳答案

您在这里展示了很多有问题的代码,因此很难知道从哪里开始。

  • 对于 initWithFrame: 来说,问题是永远不会为按钮调用此方法。此外,您还会遇到冲突,因为该按钮已经包含在内部响应点击的功能(它是一个按钮!)。

  • 在第二组代码中,您从未将 titleView 设置为 View ,因此它为 nil,并且您的代码不执行任何操作。此外,您不能同时设置 titletitleView(您正在设置 title)。

您的标题问题的答案是,titleView 当然可以响应点击。很多应用程序都这样做(包括我的)。

此外,您不需要 requireGestureRecognizerToFail - 单击手势识别器和双击手势识别器已经知道如何在它们之间进行协调。

所以基本上我的建议是:不要让一切变得过于复杂。不要做出大的假设并一头扎进去。从你知道有效的事情开始,然后采取一些小步骤。随时使用日志记录/断点测试所有内容,看看所发生的情况是否如您所想象。

关于ios - 可以让 titleView 接受点击手势吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23691867/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com