sco*_*ozj 29 iphone uitableview uilabel
在iPhone应用程序中,我想在tableView中显示信息.在每个单元格中,文本如下:John最近听音乐abcdefg.mp3.如果需要,文本可以有两行.
在文本中,a.mp3应该是可点击的,因此当用户触摸abcdefg.mp3部分时,将调用另一个页面.当用户触摸abcdefg.mp3时,它也会有一些效果,就像触摸按钮一样.
我计算文本的框架,我使用UIButton为abcdefg.mp3.
有时abcdefg.mp3可能是多行的,例如:
abc位于第一行的末尾
defg.mp3在第二行.
在这种情况下我该怎么办?
我已经搜索过了:在UILabel的NSAttributedString中创建可点击的"链接"? 但是我认为它不适合这里,因为可点击文本全部在示例中的一行中.
Jas*_*oco 118
最简单的方法是在实际视图中添加手势识别器(无论是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];
Run Code Online (Sandbox Code Playgroud)
在此示例中,将发送操作消息self,并将消息定义为
- (void)userTappedOnLink:(UIGestureRecognizer*)gestureRecognizer;
这与连接任何其他UIControl子类(例如按钮)的工作方式相同.
其他注意事项:不要尝试将相同的手势识别器添加到多个视图,它将无法正常工作.不要向多个视图添加多个手势识别器副本(它不会替换它们,只是将它们堆叠起来并浪费内存).您应该在最初创建和配置视图时添加手势识别器.
有关更多信息,请参阅UIGestureRecognizer的文档.
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!")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46973 次 |
| 最近记录: |