在iPhone应用程序中,我想在tableView中显示信息。 在每个单元格中,文本如下:John最近听音乐abcdefg.mp3。 如果需要,文本可以有两行。
在文本中,a.mp3应该是可点击的,因此当用户触摸 abcdefg.mp3 部分时,将调用另一个页面。当用户触摸 abcdefg.mp3 时,它也会产生一些效果,就像触摸按钮一样。
我计算文本的框架,我使用UIButton作为 abcdefg.mp3 。
有时 abcdefg.mp3 可能是多行的,例如:
abc 位于第一行的末尾
defg.mp3 排在第二行。
在这种情况下我该怎么做?
我已经搜索过:Create tap-able "links" in the NSAttributedString of a UILabel? 但是我认为它不适合这里,因为可点击文本在样本中都在一行中。
答案 0 :(得分:117)
最简单的方法是在实际视图中添加手势识别器(无论是UILabel还是自己的一些自定义视图)。为了使手势识别器工作,必须将视图设置为userInteractionEnabled。
这是一个例子,假设你的标签视图(或其他任何东西)被称为labelView:
UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userTappedOnLink:)];
// if labelView is not set userInteractionEnabled, you must do so
[labelView setUserInteractionEnabled:YES];
[labelView addGestureRecognizer:gesture];
在此示例中,操作消息将发送到self
,消息将定义为
- (void)userTappedOnLink:(UIGestureRecognizer*)gestureRecognizer;
这与连接任何其他UIControl子类(例如按钮)相同。
其他注释:不要尝试将相同的手势识别器添加到多个视图中,它将无法正常工作。不要向多个视图添加多个手势识别器副本(它不会替换它们,只是将它们堆叠起来并浪费内存)。您应该在最初创建和配置视图时添加手势识别器。
有关详细信息,请参阅UIGestureRecognizer的文档。
答案 1 :(得分:8)
Swift 4.2版本:
var labelView = UILabel()
let gesture = UITapGestureRecognizer(target: self, action: #selector(userTappedOnLink))
// if labelView is not set userInteractionEnabled, you must do so
labelView.isUserInteractionEnabled = true
labelView.addGestureRecognizer(gesture)
@objc func userTappedOnLink() {
print("clicked!")
}
答案 2 :(得分:2)
Swift 2.0版本:
func userTappedOnLink() {
print("clicked!")
}
///tap and link to FB page
let gesture = UITapGestureRecognizer(target: self, action: "userTappedOnLink")
// if labelView is not set userInteractionEnabled, you must do so
lblStaff.userInteractionEnabled = true
lblStaff.addGestureRecognizer(gesture)
答案 3 :(得分:1)
听起来与他们在Fancy UILabels的Twitteriffic中所取得的相似。基本上,Craig Hockenberry制作了自己的自定义“数据检测器”,这样他就可以在标签和多行文本中插入链接。请参阅此问题:Is there a way to create custom UIDataDetectorTypes?
答案 4 :(得分:1)
你也可以在上面放一个“隐形按钮”,使用一个没有文字和图像的自定义按钮。
答案 5 :(得分:0)
我认为你可以使用textView和diable滚动。我为我的项目做了同样的事情,我需要指向网站地址。只需取消选中所有内容,如检查器窗口中“滚动视图”部分中的屏幕截图所示。
答案 6 :(得分:0)
将UITapGestureRecognizer
添加到标签,以使UIlabel
可点击。
在将标签添加到tapgesture之前,不要忘记为UIlabel启用用户交互
以下是示例代码:
//Tap Gesture
UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userTapped:)];
//Adding userinteraction for label
[labelName setUserInteractionEnabled:YES];
//Adding label to tap gesture
[labelName addGestureRecognizer:gesture];