Bry*_*yan 23 ios uitapgesturerecognizer
我正在使用NIB文件来布局自定义表格视图单元格.此单元格有一个带有出口的标签,名为lblName.将UITapGestureRecognizer添加到此标签永远不会触发关联的事件.我有userInteractionEnabled = YES.
我猜测问题是UILabel在TableView中并且表/单元视图正在拦截水龙头.我能为此做点什么吗?
我想要做的就是在按下UILabel时执行一些自定义操作!我所见过的所有解决方案都是荒谬的.使用标准工具集应该很容易.但显然不是.
这是我正在使用的代码:
- (void)tapAction {
NSLog(@"Tap action");
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)];
[recognizer setNumberOfTapsRequired:1];
//lblName.userInteractionEnabled = true; (setting this in Interface Builder)
[lblName addGestureRecognizer:recognizer];
}
Run Code Online (Sandbox Code Playgroud)
Din*_*aja 23
简单的方法:
您也可以使用该标签顶部的隐形按钮.因此,它会减少为该标签添加tapGesture的工作量.
替代方式:
您不应该为此创建IBOutlet UILabel.执行此操作时,您将在自定义类实现文件中添加插座.您无法访问其他文件.因此,在自定义类中为该标签设置标记,IB并在cellForRowAtIndexPath:方法中编写代码.
更新:
在cellForRowAtIndexPath:方法中,
for(UIView *view in cell.contentViews.subviews) {
if(view.tag == 1) {
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)];
[tap setNumberOfTapsRequired:1];
[view addGestureRecognizer:tap];
}
}
Run Code Online (Sandbox Code Playgroud)
小智 14
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)];
[recognizer setNumberOfTapsRequired:1];
lblName.userInteractionEnabled = YES;
[lblName addGestureRecognizer:recognizer];
Run Code Online (Sandbox Code Playgroud)
Whi*_*ger 10
这样做没有问题:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
// create you cell
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
[lbl setText:@"example"];
[lbl setUserInteractionEnabled:YES];
[cell.contentView addSubview:lbl];
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
tap.tag = [NSIndexPath row];
[tap setNumberOfTapsRequired:1];
[lbl addGestureRecognizer:tap];
...
}
- (void)tapAction:(id)sender {
switch(((UITapGestureRecognizer *)sender).view.tag) {
case 0:
// code
break;
case 1:
// code
break;
....
}
}
Run Code Online (Sandbox Code Playgroud)
即使在使用IB创建UILabel的情况下也是如此
您可以使用以下代码在UITableView单元格中的UILable上添加点按手势
UITapGestureRecognizer *tapGeature = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(lblClick:)];
tapGeature.delegate =self;
tapGeature.numberOfTapsRequired = 1;
cell.lbl.userInteractionEnabled = YES;
[cell.lbl addGestureRecognizer:tapGeature];
Run Code Online (Sandbox Code Playgroud)
并访问选择器方法
- (void)lblClick:(UITapGestureRecognizer *)tapGesture {
UILabel *label = (UILabel *)tapGesture.view;
NSLog(@"Lable tag is ::%ld",(long)label.tag);
}
Run Code Online (Sandbox Code Playgroud)
对于斯威夫特
let tapGesture : UITapGestureRecognizer = UITapGestureRecognizer.init(target: self, action: #selector(lblClick(tapGesture:)))
tapGesture.delegate = self
tapGesture.numberOfTapsRequired = 1
cell.lbl.userInteractionEnabled = true
cell.lbl.tag = indexPath.row
cell.lbl.addGestureRecognizer(tapGesture)
func lblClick(tapGesture:UITapGestureRecognizer){
print("Lable tag is:\(tapGesture.view!.tag)")
}
Run Code Online (Sandbox Code Playgroud)
基于 Hardik Thakkar 的解决方案,使用 Swift 5 进行 2019 年更新。要检测单元格中 UIlabel 上的点击,请在下面的视图控制器中找到 cellForRowAt 方法。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {}
Run Code Online (Sandbox Code Playgroud)
返回单元格之前,将以下代码放入上述方法中:
let tapGesture : UITapGestureRecognizer = UITapGestureRecognizer.init(target: self, action: #selector(labelTap(tapGesture:)))
tapGesture.delegate = self
tapGesture.numberOfTapsRequired = 1
cell.yourLabel.isUserInteractionEnabled = true
cell.yourLabel.tag = indexPath.row
cell.yourLabel.addGestureRecognizer(tapGesture)
return cell
Run Code Online (Sandbox Code Playgroud)
向视图控制器添加一个方法来处理点击:
@objc func labelTap(tapGesture:UITapGestureRecognizer){
print("Label tag is:\(tapGesture.view!.tag)")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36567 次 |
| 最近记录: |